一些需要更改df标头的Django格式问题。
测试数据:
Test_Data = [
('Year_Month', ['Done_RFQ','Not_Done_RFQ','Total_RFQ']),
('2018_11', [10, 20, 30]),
('2019_06',[10,20,30]),
('2019_12', [40, 50, 60]),
]
df = pd.DataFrame(dict(Test_Data))
print(df)
Year_Month 2018_11 2019_06 2019_12
0 Done_RFQ 10 10 40
1 Not_Done_RFQ 20 20 50
2 Total_RFQ 30 30 60
所需的输出:
Year_Month 2018_Nov 2019_Jun 2019_Dec
0 Done_RFQ 10 10 40
1 Not_Done_RFQ 20 20 50
2 Total_RFQ 30 30 60
我的尝试
df_names = df.columns
for df_name in df_names:
if df_name[:1] == '20':
df.df_name = str(pd.to_datetime(df_name, format='%Y_%m').dt.strftime('%Y_%b'))
错误:AttributeError: 'Timestamp' object has no attribute 'dt'
我希望date对象可以用于格式化。是否有关于如何针对标头中的任何字符串通用化的建议?
答案 0 :(得分:1)
IIUC
s=pd.Series(df.columns)
s2=pd.to_datetime(s,format='%Y_%m',errors ='coerce').dt.strftime('%Y_%b')
df.columns=s2.mask(s2=='NaT').fillna(s)
df
Out[368]:
2018_Nov 2019_Jun 2019_Dec Year_Month
0 10 10 40 Done_RFQ
1 20 20 50 Not_Done_RFQ
2 30 30 60 Total_RFQ
答案 1 :(得分:1)
您可以删除.dt,因为.strftime是Timestamp的一种方法:
df.df_name = str(pd.to_datetime(df_name, format='%Y_%m').strftime('%Y_%b'))