日期时间格式更新,用于pandas中的一系列列



我有一个pandas数据框架,其中包含30多个列的子集,每个月的值,命名为"2018-09-01 00:00:00",我想将其重新格式化为一个月-年,如"Sep 2018"

我发现这个很有用:

df.iloc[:, 13:].rename(columns='{:%b %Y}'.format)

,但将其应用于整个df会破坏这些列中的数据:

df.iloc[:, 13:] = df.iloc[:, 13:].rename(columns='{:%b %Y}'.format)

如何更改列的格式,我知道的索引范围?

使用rename:

old_col_names = df.filter(regex=r'd{4}-d{2}').columns.tolist()
new_col_names = pd.to_datetime(old_col_names).strftime('%b %Y')
df = df.rename(columns=dict(zip(old_col_names, new_col_names)))

输出:

# Before rename
>>> df
id  2018-09-01 00:00:00  2018-10-01 00:00:00  data
0   0                    1                    2     3
# After rename
>>> df
id  Sep 2018  Oct 2018  data
0   0         1         2     3

设置:

data = {'id': [0], '2018-09-01 00:00:00': [1],
'2018-10-01 00:00:00': [2], 'data': [3]}
df = pd.DataFrame(data)