我有一个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)