【问题标题】: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)

      将它们改回我想要的日期。

      【讨论】:

        猜你喜欢
        • 2017-01-26
        • 2014-11-23
        • 2018-08-16
        • 2018-11-30
        • 2021-02-03
        • 1970-01-01
        • 2019-09-15
        • 2017-12-19
        • 2021-09-23
        相关资源
        最近更新 更多