Python - Pandas - 将YYYYMM转换为datetime

时间:2017-07-20 13:01:07

标签: python pandas

初学者python(以及熊猫)用户。我试图将一些数据导入到pandas数据帧中。其中一列是日期,但格式为“YYYYMM”。我试图做大多数论坛回复提出的建议:

df_cons['YYYYMM'] = pd.to_datetime(df_cons['YYYYMM'], format='%Y%m')

虽然这不起作用(ValueError: unconverted data remains: 3)。该列实际上包含每年的附加值,MM = 13。该来源使用此行作为过去一年的平均值。我猜to_datetime有问题。

有人可以提供快速解决方案,要么取消所有年度平均值(最后两位数字为“13”),要么让to_datetime忽略它们?

2 个答案:

答案 0 :(得分:2)

传递errors='coerce',然后传递dropna NaT行:

df_cons['YYYYMM'] = pd.to_datetime(df_cons['YYYYMM'], format='%Y%m', errors='coerce').dropna()

duff月值将转换为NaT

In[36]:
pd.to_datetime('201613', format='%Y%m', errors='coerce')

Out[36]: NaT

或者您可以在转换之前将其过滤掉

df_cons['YYYYMM'] = pd.to_datetime(df_cons.loc[df_cons['YYYYMM'].str[-2:] != '13','YYYYMM'], format='%Y%m', errors='coerce')

虽然这可能会导致对齐问题,因为返回的Series需要长度相同,所以只需传递errors='coerce'就可以了解更简单的解决方案

答案 1 :(得分:0)

首先清理数据框。

df_cons = df_cons[~df_cons['YYYYMM'].str.endswith('13')]
df_cons['YYYYMM'] = pd.to_datetime(df_cons['YYYYMM'])

如果YYYYMM列在数据集中是唯一的,我建议将列转换为句点索引。

首先将YYYYMM转换为索引,然后将其转换为月租期。

df_cons = df_cons.reset_index().set_index('YYYYMM').to_period('M')