python - 熊猫将日期字符串(仅月份和年份)转换为日期时间
问题描述
我正在尝试将日期时间对象转换为日期时间。在原始数据框中,数据类型是字符串,数据集的形状 = (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
如果这个问题是重复的,请引导我到原来的问题,我找不到任何合适的答案。
预先感谢大家的帮助
解决方案
首先,如果出现明显的一些日期时间不匹配的错误,您可以通过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
推荐阅读
- docker - 如何在 alpine Docker 映像中安装 docker-compose 发布二进制文件?
- split - 如何查找拆分函数生成的列表的长度
- excel - 将 Excel 连接到 CouchDB
- python - Python Dataframe 从多列中填充 nan
- graphql - graphql - 如何过滤嵌套列表
- matrix - Fortran - 将矩阵插入其他矩阵
- python - 在运行时创建模型/在运行时用较小的函数构建函数
- c# - SignalR ServerlessHub,池在一段时间后变空
- python - 科尔多瓦用 crontab 在 ubuntu 上构建 android 似乎不起作用
- windows - 如何配置 Windows/winsock 来回复 IGMP v3 查询?