Sim*_*dio 3 python string-to-datetime pandas
我正在尝试将日期时间对象转换为日期时间。在原始数据框中,数据类型是字符串,数据集的形状为 (28000000, 26)。重要的是,日期格式仅为 MMYYYY。这是一个数据示例:
DATE
Out[3] 0 081972
1 051967
2 101964
3 041975
4 071976
Run Code Online (Sandbox Code Playgroud)
我试过:
df['DATE'].apply(pd.to_datetime(format='%m%Y'))
Run Code Online (Sandbox Code Playgroud)
和
pd.to_datetime(df['DATE'],format='%m%Y')
Run Code Online (Sandbox Code Playgroud)
我两次都遇到运行时错误
然后
df['DATE'].apply(pd.to_datetime)
Run Code Online (Sandbox Code Playgroud)
它适用于其他未显示的列(采用 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
Run Code Online (Sandbox Code Playgroud)
期望输出:
DATE
0 1972-08
1 1967-05
2 1964-10
3 1975-04
4 1976-07
Run Code Online (Sandbox Code Playgroud)
如果这个问题是重复的,请引导我到原来的问题,我找不到任何合适的答案。
预先感谢大家的帮助
首先,如果错误明显出现某些日期时间不匹配,您可以通过errors='coerce'参数 and对其进行测试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
Run Code Online (Sandbox Code Playgroud)
将更改数据的输出转换为日期时间和月份周期的解决方案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
Run Code Online (Sandbox Code Playgroud)
原始数据的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7266 次 |
| 最近记录: |