【问题标题】:How to invert columns for a large data set in Python如何在 Python 中反转大型数据集的列
【发布时间】:2018-11-04 05:33:37
【问题描述】:

我正在处理一个包含大约 900K 行的大型数据集(即,有 182 个国家/地区,在几年(1970-2014 年)中每个国家/地区有大约 50-60 个指标。我正在尝试使用 Python 来制作“指标代码”作为新列,因此它按国家/地区列出了每个相关指标的所有相关数据。请记住,所有年份(1970-2014)都没有标记在一个标签下(即年份)

原始数据集

Country Indicator Code   2001 2001 2003 2004 

US      Enrollment Rate  99%  98%  97%  96% 

US      Literacy Rate    99%  93%  95%  98%  

输出数据集的目标

Country  Year    Enrollment Rate Literacy Rate etc. 
US       2001     99%            99% 

我试过下面的代码

res2 = data.pivot_table(index=['Country_Code'], columns=['Indicator_Code'],
                 values=['2006','2007'], aggfunc='first', fill_value=0)

这很接近,但指标每年都在重复,并且年份似乎是 3D。我已经尝试将所有年份移动到列或索引部分,但这只是返回内存错误。

 res = data.pivot_table(index=['Country_Code','1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980'], columns=['Indicator_Code'], aggfunc='first', fill_value=0)

我已经尝试过了,但由于某种原因它也无法正常工作。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    一个很好的问题;您需要将列从宽格式更改为长格式 (melt, see docs),然后旋转其他列

    m = df.melt(id_vars=['Country', 'IndicatorCode'], var_name='Year')
    m['value'] = pd.to_numeric(m['value'].str.strip(r'%'))
    m = m.pivot_table(index=['Country', 'Year'], columns=['IndicatorCode'], 
                      values='value')
    del m.columns.name
    m.reset_index(inplace=True)
    print(m)
    
      #Country  Year  EnrollmentRate  LiteracyRate
    #0      US  2001              99            99
    #1      US  2002              98            93
    #2      US  2003              97            95
    #3      US  2004              96            98
    

    【讨论】:

    • 谢谢,我试过下面的代码 m = data.melt(id_vars=['Country_Code', 'Indicator_Code'], var_name='Year') m['value'] = pd .to_numeric(m['value'].str.strip(r'%')) m = m.pivot_table(index=['Country_Code', 'Year'], columns=['Indicator_Code'], values='value ') del m.columns.name m.reset_index(inplace=True) print(m) 返回如下错误:ValueError: Unable to parse string "Adjusted net learning rate, lower secondary, both sexes (%)"
    猜你喜欢
    • 2023-03-15
    • 2020-05-16
    • 2018-08-05
    • 2022-01-24
    • 2022-10-01
    • 2021-06-23
    • 2012-12-31
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多