Python Pandas将yyymm转换为datetim

2024-06-24 11:58:48 发布

您现在位置:Python中文网/ 问答频道 /正文

初级python(因此是pandas)用户。我正在尝试将一些数据导入到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忽略它们?


Tags: to数据用户formatpandasdfdatadatetime
2条回答

传递errors='coerce',然后dropnaNaT

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

duff month值将转换为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')

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

先清理数据帧。

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

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

首先将YYYYMM转换为index,然后将其转换为monthly period。

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

相关问题 更多 >