[英]How to change column name from date to Month Name-year in python
我想将日期列更改为月份名称 - 年份,我正在使用以下代码
rows = []
sort = ''
for v in results:
row = {'date':v['TimePeriod']['Start']}
sort = v['TimePeriod']['Start']
for i in v['Groups']:
key = i['Keys'][0]
if key in self.accounts:
key = self.accounts[key][ACCOUNT_Name]
row.update({key:int(float(i['Metrics']['UnblendedCost']['Amount']))})
if not v['Groups']:
row.update({'Total':int(float(v['Total']['UnblendedCost']['Amount']))})
rows.append(row)
df = pd.DataFrame(rows)
df.set_index("Mon_Year", inplace= True)
df = df.fillna(0.0)
if Style == 'Change':
dfc = df.copy()
lastindex = None
for index, row in df.iterrows():
if lastindex:
for i in row.index:
try:
df.at[index,i] = dfc.at[index,i] - dfc.at[lastindex,i]
except:
logging.exception("Error")
df.at[index,i] = 0
lastindex = index
df = df.T
df = df.sort_values(sort, ascending=False)
self.reports.append({'Name':Name,'Data':df, 'Type':type})
并获得 output 作为
2021-02-01 2021-03-01 2021-04-01
xxxxxx xxxxx xxxxx
需要 output
Feb-2021 Mar-2021 Apr-2021
xxxxxx xxxxx xxxxx
有人可以帮忙吗? 我是 python 的新手
您可以使用pd.to_datetime()
重新格式化日期格式的列标签,然后使用DatetimeIndex.strftime()
,如下所示:
df.columns = pd.to_datetime(df.columns).strftime('%b-%Y')
data = {'2021-02-01': [1, 2, 3], '2021-03-01': [11, 12, 13], '2021-04-01': [21, 22, 23]}
df = pd.DataFrame(data)
print(df)
2021-02-01 2021-03-01 2021-04-01
0 1 11 21
1 2 12 22
2 3 13 23
df.columns = pd.to_datetime(df.columns).strftime('%b-%Y')
print(df)
Feb-2021 Mar-2021 Apr-2021
0 1 11 21
1 2 12 22
2 3 13 23
在现实生活中,如果您的列标签并非都是日期格式,并且只想转换相关的列标签,您可以这样做:
假设您在日期中只有 3 列df.columns[1:4]
带有列标签,您可以使用:
df.columns = df.columns[0:1].to_list() + pd.to_datetime(df.columns[1:4]).strftime('%b-%Y').to_list() + df.columns[4:].to_list()
data = {'ID': ['A001', 'A002', 'A003'], '2021-02-01': [1, 2, 3], '2021-03-01': [11, 12, 13], '2021-04-01': [21, 22, 23], 'Other': ['a', 'b', 'c']}
df = pd.DataFrame(data)
print(df)
ID 2021-02-01 2021-03-01 2021-04-01 Other
0 A001 1 11 21 a
1 A002 2 12 22 b
2 A003 3 13 23 c
df.columns = df.columns[0:1].to_list() + pd.to_datetime(df.columns[1:4]).strftime('%b-%Y').to_list() + df.columns[4:].to_list()
print(df)
ID Feb-2021 Mar-2021 Apr-2021 Other
0 A001 1 11 21 a
1 A002 2 12 22 b
2 A003 3 13 23 c
您可以使用 python 的datetime
时间来获取所需格式的日期时间字符串。
from datetime import datetime
>>> datetime.strptime('2020-10-20', '%Y-%m-%d').strftime('%b-%Y')
'Oct-2020'
给定一个 dataframe 像这样:
>>> df = pd.DataFrame({'2021-02-01':[1,2,3],'2021-03-01':[10,30,15],'2021-04-01':[-0.25,2.5,-0.35]})
>>> df
2021-02-01 2021-03-01 2021-04-01
0 1 10 -0.25
1 2 30 2.50
2 3 15 -0.35
首先使用datetime.strptime
将列名字符串转换为日期时间 object,然后使用datetime.strftime
将日期时间 object 转换回所需格式的字符串并分配为column
您可以像这样创建新列名称的列表:
>>> df.columns = list(map(lambda x: x.strftime('%b-%Y'), map(lambda x: datetime.strptime(x, '%Y-%m-%d'), df.columns.to_list())))
或者可以直接在dataframe.columns
属性上调用map
方法
df.columns = df.columns.map(lambda x: datetime.strptime(x, '%Y-%m-%d')).map(lambda x: x.strftime('%b-%Y'))
PS : Remember the order of map
, for python's native map
function, it is from inner most to outer most, for dataframe's map
method, it's from left to right.
OUTPUT :
Feb-2021 Mar-2021 Apr-2021
0 1 10 -0.25
1 2 30 2.50
2 3 15 -0.35
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.