我在 Python Pandas 中有数据框,如下所示:
number
----------
54062903812
96120309725
00021201044
00346
我需要创建新列,我需要将每个值的前 6 个元素从“数字”列转换为生日日期:例如:
值 1 和 2 表示出生年份
出生 3 个月和 4 个月的值
值 5 和 6 天出生
目前我使用下面的函数来做到这一点,但是这个函数有一个很大的问题,因为它返回 54062903812 是 2054-06-29 但它当然应该是 1954-06-29,当然这是不可能的。我的代码:
df["birthday"] = pd.to_datetime(df["number"].str[:6], format='%y%m%d', errors='coerce')
如何修改我的代码以便能够识别:
** 请注意,我只需要转换具有 11 个元素的“数字”列中的这些值!
如果您可以从您的数据中假设任何 00 到 21 是 2000 到 2021,您可以尝试下面的代码。这是一个想法。
import pandas as pd
df = pd.DataFrame({'Col1': {0: 54062903812, 1: 96120309725, 2: 21201044}})
def addYear(x):
years = ['00' , '01' , '02' , '03' , '04' , '05' , '06' , '07' , '08' , '09' , '10' , '11' , '12' , '13' , '14' , '15' , '16' , '17' , '18' , '19' , '20' , '21' , '22']
x = str(x)
if x[:2] in years:
x = '20' + x
else:
x = '19' + x
x = pd.to_datetime(x[:7], format='%Y%m%d')
return x
df['Date1'] = df.apply(lambda x: addYear(x['number']), axis=1)
print(df)
number Date1
0 54062903812 1954-06-02
1 96120309725 1996-01-20
2 21201044 2021-02-01
更新:
如果 len(x) < 11,则来自评论:
import pandas as pd
df = pd.DataFrame({'Col1': {0: 54062903812, 1: 96120309725, 2: 21201044, 3: 1234}})
def addYear(x):
years = ['00' , '01' , '02' , '03' , '04' , '05' , '06' , '07' , '08' , '09' , '10' , '11' , '12' , '13' , '14' , '15' , '16' , '17' , '18' , '19' , '20' , '21' , '22']
x = str(x)
if len(x) < 11:
return 0
else:
if x[:2] in years:
x = '20' + x
else:
x = '19' + x
x = pd.to_datetime(x[:7], format='%Y%m%d')
return x
df['Date1'] = df.apply(lambda x: addYear(x['Col1']), axis=1)
print(df)
Col1 Date1
0 54062903812 1954-06-02 00:00:00
1 96120309725 1996-01-20 00:00:00
2 21201044 0
3 1234 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句