在熊猫中读取Excel文件

时间:2019-08-01 13:19:57

标签: python excel pandas

我正在尝试使用熊猫读取Excel文件,但是不确定是否能够读取所需的方式。

我的文件是这样的:

enter image description here

我正在读取这样的文件:

excel_file = pd.ExcelFile('MY_FILE')
df = excel_file.parse(sheet_name=0, header=1)

通过这种方式,我可以阅读,但不确定每个变量属于哪个组。在这种情况下,对于每一列,我需要知道它们来自哪个组。有什么办法吗?

谢谢!

3 个答案:

答案 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 的情况:

  • GROUP 1 GROUP 2 是最高级别,
  • A B C 是从属级别。

在读取 Excel 文件时,我通常使用 pd.read_excel 方法。

在您的情况下,您可能应该传递 header = [0,1] 参数, 指定哪些行包含列名。

因此,请尝试以下操作:

df = pd.read_excel('MY_FILE.xls', header=[0,1])

您也可以省略 sheet_name = 0 ,因为这是默认值(读取 从第一个工作表开始,工作表编号从0开始。

我也不确定是否可以省略文件扩展名( xls xlsx ),因此在上述建议中,我明确地写了它。