我正在尝试将datetime对象转换为datetime。在原始数据框中,数据类型是字符串,数据集的形状为(28000000,26)。重要的是,日期格式仅为MMYYYY。这是一个数据示例:
DATE
Out[3] 0 081972
1 051967
2 101964
3 041975
4 071976
我尝试过:
df['DATE'].apply(pd.to_datetime(format='%m%Y'))
和
pd.to_datetime(df['DATE'],format='%m%Y')
我两次都遇到运行时错误
然后
df['DATE'].apply(pd.to_datetime)
它适用于其他未显示的列(具有DDMMYYYY格式),但是使用df ['DATE']生成了将来的日期,因为它将日期读取为MMDDYY而不是MMYYYY。
DATE
0 1972-08-19
1 2067-05-19
2 2064-10-19
3 1975-04-19
4 1976-07-19
期望输出:
DATE
0 1972-08
1 1967-05
2 1964-10
3 1975-04
4 1976-07
如果该问题重复出现,请直接回覆我原来的问题,我找不到任何合适的答案。
在此先感谢大家的帮助
答案 0 :(得分:1)
首先,如果明显引发了某些日期时间不匹配的错误,则可以通过errors='coerce'
参数和Series.isna
进行测试,因为对于不匹配的值,返回缺少的值:
print (df)
DATE
0 81972
1 51967
2 101964
3 41975
4 171976 <-changed data
print (pd.to_datetime(df['DATE'],format='%m%Y', errors='coerce'))
0 1972-08-01
1 1967-05-01
2 1964-10-01
3 1975-04-01
4 NaT
Name: DATE, dtype: datetime64[ns]
print (df[pd.to_datetime(df['DATE'],format='%m%Y', errors='coerce').isna()])
DATE
4 171976
将更改后的数据输出并通过Series.dt.to_period
将日期和月份转换为解决方案:
df['DATE'] = pd.to_datetime(df['DATE'],format='%m%Y', errors='coerce').dt.to_period('m')
print (df)
DATE
0 1972-08
1 1967-05
2 1964-10
3 1975-04
4 NaT
原始数据解决方案:
df['DATE'] = pd.to_datetime(df['DATE'],format='%m%Y', errors='coerce').dt.to_period('m')
print (df)
0 1972-08
1 1967-05
2 1964-10
3 1975-04
4 1976-07
答案 1 :(得分:0)
我会做的:
df['date_formatted'] = pd.to_datetime(
dict(
year=df['DATE'].str[2:],
month=df['DATE'].str[:2],
day=1
)
)
也许这会有所帮助。适用于您的示例数据。