我正在尝试使用熊猫读取Excel文件,但是不确定是否能够读取所需的方式。
我的文件是这样的:
我正在读取这样的文件:
excel_file = pd.ExcelFile('MY_FILE')
df = excel_file.parse(sheet_name=0, header=1)
通过这种方式,我可以阅读,但不确定每个变量属于哪个组。在这种情况下,对于每一列,我需要知道它们来自哪个组。有什么办法吗?
谢谢!
答案 0 :(得分:2)
可以在参数header
中为列中的MultiIndex
指定第一行和第二行,并为函数read_excel
中的第一列中的索引指定index_col
:
df = pd.read_excel('file.xlsx', header=[0,1], index_col=[0], sheet_name=0)
您的解决方案应使用相同的参数进行更改:
excel_file = pd.ExcelFile('file.xlsx')
df = excel_file.parse(header=[0,1], index_col=[0], sheet_name=0)
print (df)
CUSTOM NAME g1 g2
NAME A B A B C
NAME 1 1.0 NaN 1 NaN 1.0
NAME 1 NaN 1.0 1 1.0 NaN
print (df.columns)
MultiIndex(levels=[['g1', 'g2'], ['A', 'B', 'C']],
codes=[[0, 0, 1, 1, 1], [0, 1, 0, 1, 2]],
names=['CUSTOM NAME', 'NAME'])
print (df.index)
Index(['NAME 1', 'NAME 1'], dtype='object')
使用元组过滤MultiIndex
的选定列:
print (df[df[('g1', 'A')] == 1])
CUSTOM NAME g1 g2
NAME A B A B C
NAME 1 1.0 NaN 1 NaN 1.0
Select rows in pandas MultiIndex DataFrame
中的更多信息,仅删除loc
,因为列中的MultiIndex
。
答案 1 :(得分:2)
如果将整数列表传递给MultiIndex
,则可以使用header
:
excel_file = pd.ExcelFile('example.xlsx')
df = excel_file.parse(sheet_name=0, header=[0,1])
数据框:
CUSTOM NAME GROUP 1 GROUP 2
NAME A B A B C
NAME 1 1.0 NaN 1 NaN 1.0
NAME 2 NaN 1.0 1 1.0 NaN
文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
答案 2 :(得分:1)
仅从行 1 中读取列名 可能会导致重复列 名称,因此这样的调用可能会导致执行错误。
似乎在列上有一个 MultiIndex 的情况:
在读取 Excel 文件时,我通常使用 pd.read_excel 方法。
在您的情况下,您可能应该传递 header = [0,1] 参数, 指定哪些行包含列名。
因此,请尝试以下操作:
df = pd.read_excel('MY_FILE.xls', header=[0,1])
您也可以省略 sheet_name = 0 ,因为这是默认值(读取 从第一个工作表开始,工作表编号从0开始。
我也不确定是否可以省略文件扩展名( xls 或 xlsx ),因此在上述建议中,我明确地写了它。