Python 3.x 数据帧列到多索引数据帧
我在Excel工作表中有以下数据,我想将其作为多索引数据框读取:Python 3.x 数据帧列到多索引数据帧,python-3.x,pandas,multi-index,Python 3.x,Pandas,Multi Index,我在Excel工作表中有以下数据,我想将其作为多索引数据框读取: Y1 Y1 Y2 Y2 B H1 H2 H1 H2 1 80 72 79.2 84.744 2 240 216 237.6 254.232 3 40 36 39.6 42.372 4 160 144 158.4
Y1 Y1 Y2 Y2
B H1 H2 H1 H2
1 80 72 79.2 84.744
2 240 216 237.6 254.232
3 40 36 39.6 42.372
4 160 144 158.4 169.488
5 240 216 237.6 254.232
6 0 0 0 0
我是这样读的:
DATA = pd.read_excel('data.xlsx',sheet_name=None)
因为我也在看其他的报纸
问题1:
此数据不作为多索引数据读取。如何使其作为多索引读取?或者我应该把它读作一个数据帧,然后把它转换成多索引?
读取为数据帧的当前结果
DATA['Load']
Y1 Y1.1 Y2 Y2.1
bus H1 H2 H1 H2
1 80 72 79.2 84.744
2 240 216 237.6 254.232
3 40 36 39.6 42.372
4 160 144 158.4 169.488
5 240 216 237.6 254.232
6 0 0 0 0
问题2,可能是更基本的问题:
当一个或多个索引位于列侧时,如何处理多索引?在本例中,我希望通过指定B,Y,H
来访问数据。我知道当多个索引都作为索引时如何使用它们,但当索引位于列上时,我就无法掌握它的诀窍
非常感谢您的帮助:)
附言:
另一张图纸可能如下所示:
from to x ratea
1 2 0.4 10
1 4 0.6 80
1 5 0.2 10
2 3 0.2 10
2 4 0.4 10
2 6 0.3 10
3 5 0.2 10
4 6 0.3 10
在这里,我将设置
from
和to
为set(set_index(['from','to']
)以获取多索引数据帧。要向多索引用户读取这样的数据帧,请在pd.read_excel()中读取头参数。
这意味着您正在告诉pandas您有两个标题行0和1
谈话结束后:
df = pd.read_excel('Book2.xlsx', header=[0,1])
df2 = df.unstack().to_frame()
idx = df2.swaplevel(0,2).swaplevel(1,2).index.set_names(['B', 'Y', 'H'])
df2.set_index(idx, inplace=True)
0
B Y H
1 Y1 H1 80.000
2 Y1 H1 240.000
3 Y1 H1 40.000
4 Y1 H1 160.000
5 Y1 H1 240.000
6 Y1 H1 0.000
1 Y1 H2 72.000
2 Y1 H2 216.000
3 Y1 H2 36.000
4 Y1 H2 144.000
5 Y1 H2 216.000
6 Y1 H2 0.000
1 Y2 H1 79.200
2 Y2 H1 237.600
3 Y2 H1 39.600
4 Y2 H1 158.400
5 Y2 H1 237.600
6 Y2 H1 0.000
1 Y2 H2 84.744
2 Y2 H2 254.232
3 Y2 H2 42.372
4 Y2 H2 169.488
5 Y2 H2 254.232
6 Y2 H2 0.000
谢谢。当我只看一张纸的时候,这就行了。如果我理解正确,我需要单独阅读那张纸,我不能和其他的纸一起阅读,然后设置索引,对吗?假设它是像你说的那样单独阅读的,当我写df.index时,我没有把这些标题作为索引。我不明白为什么。有什么想法吗ion 2?谢谢你抽出时间:)@Ali我想我在更新的答案中回答了你的第二个问题。你的其他床单是什么样子的?非常感谢你的回答。读取数据后(假设一次读取一张表),如何设置索引?目前,如果我要求
df.index
我得到的是1到6,而不是那些标题。我面临的挑战是B列、Y列和H列必须是索引,而不仅仅是Y列和H列。@Ali为了澄清,您希望整个示例数据框成为行索引:所有列?我希望能够通过指定B、Y、H
来访问数据,类似于我发布的另一张表,我可以在其中指定“from”,'到'
,然后我指定列'x'
并得到x值,我希望能够指定B,H,Y
并得到相应的值。(可能我没有正确理解一个概念,如果我把你弄糊涂了,很抱歉。)
df = pd.read_excel('Book2.xlsx', header=[0,1])
df2 = df.unstack().to_frame()
idx = df2.swaplevel(0,2).swaplevel(1,2).index.set_names(['B', 'Y', 'H'])
df2.set_index(idx, inplace=True)
0
B Y H
1 Y1 H1 80.000
2 Y1 H1 240.000
3 Y1 H1 40.000
4 Y1 H1 160.000
5 Y1 H1 240.000
6 Y1 H1 0.000
1 Y1 H2 72.000
2 Y1 H2 216.000
3 Y1 H2 36.000
4 Y1 H2 144.000
5 Y1 H2 216.000
6 Y1 H2 0.000
1 Y2 H1 79.200
2 Y2 H1 237.600
3 Y2 H1 39.600
4 Y2 H1 158.400
5 Y2 H1 237.600
6 Y2 H1 0.000
1 Y2 H2 84.744
2 Y2 H2 254.232
3 Y2 H2 42.372
4 Y2 H2 169.488
5 Y2 H2 254.232
6 Y2 H2 0.000