【问题标题】:Read excel and reformat the multi-index headers in Pandas读取 excel 并重新格式化 Pandas 中的多索引标题
【发布时间】:2020-04-15 20:05:02
【问题描述】:

给定一个excel文件,格式如下:

阅读pd.read_clipboard,我明白了:

   year      2018 Unnamed: 2      2019 Unnamed: 4
0  city  quantity      price  quantity      price
1    bj        10          2         4          7
2    sh         6          8         3          4

只是想知道是否可以使用 Pandas 转换为以下格式:

   year city  quantity  price
0  2018   bj        10      2
1  2019   bj         4      7
2  2018   sh         6      8
3  2019   sh         3      4

【问题讨论】:

  • 可以使用df = pd.read_excel(file, header=[0,1], index_col=[0]) 吗?
  • 非常感谢,我会测试并通知您

标签: python-3.x pandas


【解决方案1】:

我认为这里最好将 excel 文件转换为 DataFrame 并使用 MultiIndex in columns 和第一列作为索引:

df = pd.read_excel(file, header=[0,1], index_col=[0])

print (df)
year     2018           2019      
city quantity price quantity price
bj         10     2        4     7
sh          6     8        3     4

print (df.columns)
MultiIndex([('2018', 'quantity'),
            ('2018',    'price'),
            ('2019', 'quantity'),
            ('2019',    'price')],
           names=['year', 'city'])

然后通过DataFrame.stack重塑,通过DataFrame.swaplevel更改级别顺序,通过DataFrame.rename_axis设置索引和列名,最后将index转换为列,如果需要,将年份转换为整数:

df1 = (df.stack(0)
         .swaplevel(0,1)
         .rename_axis(index=['year','city'], columns=None)
         .reset_index()
         .assign(year=lambda x: x['year'].astype(int)))
print (df1)
   year city  price  quantity
0  2018   bj      2        10
1  2019   bj      7         4
2  2018   sh      8         6
3  2019   sh      4         3

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2020-01-29
    • 2016-10-28
    • 2021-11-23
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2014-07-10
    • 2017-03-26
    相关资源
    最近更新 更多