Pandas 将日期字符串(仅月和年)转换为日期时间

Pandas Converting date string (only month and year) to 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

如果此问题重复,请将我指向原始问题,我找不到任何合适的答案。

提前感谢大家的帮助

首先如果报错明显是某些datetimes不匹配,可以通过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

我会做的:

df['date_formatted'] = pd.to_datetime(
    dict(
        year=df['DATE'].str[2:], 
        month=df['DATE'].str[:2], 
        day=1
    )
)

也许这有帮助。适用于您的示例数据。