【发布时间】:2020-06-19 04:13:53
【问题描述】:
我尝试将数据从 Excel 导入到 Pandas,但在重新排列肉类数据时遇到问题。
Excel 工作表采用以下格式(此处为简化): Original data
但我想将 Excel 表导入到 Pandas 数据框,然后以这种格式重新排列,以简化 Pandas 中的统计绘图: Final data
我尝试了以下方法,但无法得到正确的格式:
import numpy as np
import pandas as pd
FNAME = 'Original.xlsx'
df = pd.read_excel(FNAME, sheet_name='Sheet1', header = [0,1,2,3])
mi = pd.MultiIndex.from_frame(df)
dfmi = pd.melt(df, id_vars=[mi.names[0]])
# Add column index
col = list(mi.names[0])
col.insert(0,'temp')
col.append('value')
col[-2]='type'
dfmi.columns = col
df
Out[17]:
A a1
B b1 b2
C c1 c2
Unnamed: 0_level_3 Data 1 Data 2 Data 3 Data 1 Data 2 Data 3
0 NaN 1 7 13 4 10 16
1 NaN 2 8 14 5 11 17
2 NaN 3 9 15 6 12 18
dfmi
Out[18]:
temp A B C type value
0 NaN a1 b1 c1 Data 1 1
1 NaN a1 b1 c1 Data 1 2
2 NaN a1 b1 c1 Data 1 3
3 NaN a1 b1 c1 Data 2 7
4 NaN a1 b1 c1 Data 2 8
5 NaN a1 b1 c1 Data 2 9
6 NaN a1 b1 c1 Data 3 13
7 NaN a1 b1 c1 Data 3 14
8 NaN a1 b1 c1 Data 3 15
9 NaN a1 b2 c2 Data 1 4
10 NaN a1 b2 c2 Data 1 5
11 NaN a1 b2 c2 Data 1 6
12 NaN a1 b2 c2 Data 2 10
13 NaN a1 b2 c2 Data 2 11
14 NaN a1 b2 c2 Data 2 12
15 NaN a1 b2 c2 Data 3 16
16 NaN a1 b2 c2 Data 3 17
17 NaN a1 b2 c2 Data 3 18
我喜欢的 Pandas 格式是:
A B C Data 1 Data 2 Data 3
0 a1 b1 c1 1 7 13
1 a1 b1 c1 2 8 14
2 a1 b1 c1 3 9 15
3 a1 b2 c2 4 10 16
4 a1 b2 c2 5 11 17
5 a1 b2 c2 6 12 18
但 dfmi 中的值仅堆叠到一列,我想保留三列数据。有没有其他方法可以得到我喜欢的数据格式?
链接到 Excel 文件: Excel file Original data
【问题讨论】:
标签: excel python-3.x pandas