【问题标题】:Rename hundred or more column names in pandas dataframe重命名熊猫数据框中的一百个或更多列名
【发布时间】:2020-08-02 02:52:00
【问题描述】:
我正在使用供个人使用的 John Hopkins Covid 数据来创建图表。数据按国家/地区显示累计死亡人数,我想要每天的死亡人数。在我看来,最简单的方法是创建两个数据框并从另一个中减去一个。但是该文件的列名是日期和代码,例如df3 = df2 - df1 减去具有匹配日期的列。所以我想用一些简单的索引重命名所有列,例如 1, 2, 3, ....
我不知道该怎么做?
【问题讨论】:
标签:
python
pandas
dataframe
【解决方案1】:
new_names=list(range(data.shape[1]))
data.columns=new_names
这会将数据列从 0 向上重命名。
【解决方案2】:
您可以重新塑造数据:使用日期和行标签,并使用国家、省作为列标签。
import pandas as pd
covid_csv = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'
df_raw = (pd.read_csv(covid_csv)
.set_index(['Country/Region', 'Province/State'])
.drop(columns=['Lat', 'Long'])
.transpose())
df_raw.index = pd.to_datetime(df_raw.index)
print( df_raw.iloc[-5:, 0:5] )
Country/Region Afghanistan Albania Algeria Andorra Angola
Province/State NaN NaN NaN NaN NaN
2020-07-27 1269 144 1163 52 41
2020-07-28 1270 148 1174 52 47
2020-07-29 1271 150 1186 52 48
2020-07-30 1271 154 1200 52 51
2020-07-31 1272 157 1210 52 52
现在,您可以使用丰富的 pandas 工具集进行时间序列分析。例如,使用diff() 将累积死亡人数转换为每日死亡率。或者,您可以计算 N 天移动平均线,创建时间序列图,...
print(df_raw.diff().iloc[-5:, 0:5])
Country/Region Afghanistan Albania Algeria Andorra Angola
Province/State NaN NaN NaN NaN NaN
2020-07-27 10.0 6.0 8.0 0.0 1.0
2020-07-28 1.0 4.0 11.0 0.0 6.0
2020-07-29 1.0 2.0 12.0 0.0 1.0
2020-07-30 0.0 4.0 14.0 0.0 3.0
2020-07-31 1.0 3.0 10.0 0.0 1.0
最后,df_raw.sum(level='Country/Region', axis=1) 将聚合一个国家/地区内的所有省份。
【解决方案3】:
感谢您的时间和精力,但我想出了一个简单的方法。
for i, row in enumerate(df):
df.rename(columns = { row : str(i)}, inplace = True)
更改列名,然后
for i, row in enumerate(df):
df.rename(columns = { row : str( i + 43853)}, inplace = True)
将它们改回我想要的日期。