首页 > 解决方案 > 熊猫将日期字符串(仅月份和年份)转换为日期时间

问题描述

我正在尝试将日期时间对象转换为日期时间。在原始数据框中,数据类型是字符串,数据集的形状 = (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

如果这个问题是重复的,请引导我到原来的问题,我找不到任何合适的答案。

预先感谢大家的帮助

标签: pythonpandasstring-to-datetime

解决方案


首先,如果出现明显的一些日期时间不匹配的错误,您可以通过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

推荐阅读