如何用列表形式访问多层索引DataFrame的指定列?
解决多层列索引DataFrame的列访问问题
这个问题我之前也碰到过!原因是pandas对于多层索引的列,直接用普通列表['bar','one']访问时,会把列表里的每个元素都当成第一层级的列名来查找,但'one'是第二层级的索引,自然找不到就报错了。
给你两个简单的解决方法:
方法1:用元组组成的列表指定列
你需要把每一组层级索引打包成元组,再放到列表里,这样pandas就能准确识别每一层的索引值:
import numpy as np import pandas as pd # 还原你的DataFrame index = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']), np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])] df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index) # 正确的columns定义 columns = [('bar', 'one')] # 一次性访问目标列 target_df = df[columns] print(target_df)
如果需要同时访问多组列,比如bar/one和baz/two,直接扩展列表就行:
columns = [('bar', 'one'), ('baz', 'two')] target_df = df[columns]
方法2:使用loc进行精准定位
loc方法可以通过第二个参数直接指定多层列索引的元组,写法更简洁:
target_df = df.loc[:, ('bar', 'one')] # 如果要选多列,同样用元组的列表 target_df = df.loc[:, [('bar', 'one'), ('baz', 'two')]]
两种方法都能完美解决你的问题,你可以根据自己的习惯选择~
内容的提问来源于stack exchange,提问作者Vaaal88
相关产品推荐
相关产品推荐

