如何将 YYYYMM 转换为没有日期的 YYYY-MM 日期时间格式?

How to convert YYYYMM to YYYY-MM datetime format without day?

我有两个具有每月频率的数据集。对于其中之一,df,我必须使用以下代码汇总一些数据以将其从每日转换为每月:

df_grouped=df.groupby([df.index.to_period('M'),'City ID']).agg({'Estimated Population':'mean','Estimated Population_2019':'mean','Confirmed Rate':['mean','std'],'Death Rate':['mean','std'],'New Confirmed':'sum','New Deaths':'sum'})

df_grouped.index.rename(['Month','City ID'],inplace=True)

进行这些更改后,我的日期格式变为 YYYY-MM,例如:

2020-01
2020-02
...
2021-07

我的另一个数据集 df2 的日期格式为 YYYMM,因此我使用以下代码对其进行转换:

df2['DATE'] = pd.to_datetime(df2['DATE'],format='%Y%m')

我的新日期变成格式YYYY-MM-DD,其中所有DD变成01,如下:

2020-01-01
2020-02-01
...
2021-07-01

如何将 df2 日期从 YYYY-MM-DD 转换为 YYYY-MM

我在想,也许有一种方法可以直接从 YYYYMM 转换为 YYYY-MM

您可以使用

df2['DATE'] = pd.to_datetime(df2['DATE'],format='%Y%m').dt.strftime('%Y-%m')
# or
df['date'] = df['date'].astype(str).str.replace(r'(\d{4})(\d{2})', r'-', regex=True)

使用:

df = pd.DataFrame({'date': ['2020-01-01', '2020-02-01']})
pd.to_datetime(df['date']).dt.to_period('M')

输出:

将您的列转换为 PeriodIndex:

>>> pd.PeriodIndex(df2['DATE'], freq='M')
PeriodIndex(['2020-09', '2020-10', '2020-11', '2020-12', '2021-01', '2021-02'],
            dtype='period[M]', name='DATE')

输入数据:

dti = pd.date_range('2020-9', '2021-3', freq='M')
df2 = pd.DataFrame({'DATE': dti.strftime('%Y%m')})
print(df2)

# Output
     DATE
0  202009
1  202010
2  202011
3  202012
4  202101
5  202102