如何将过滤后的excel表导入python?

xir*_*uru 3 python excel

我有一个 excel 表,它看起来像

在此处输入图片说明

然后,我在 Sex 列上创建了一个过滤器来获取所有女性数据,它看起来像:

在此处输入图片说明

然后,我想将过滤后的数据导入python。我使用了以下熊猫命令:

df = pd.read_excel(io="test.xlsx", sheetname="Sheet1")
print(df)
Run Code Online (Sandbox Code Playgroud)

问题是我得到了整个数据:

   Id   Name  Age Sex
0   1    Tom   12   M
1   2  Silke   33   F
2   3   Olga   22   F
3   4    Tom   33   M
Run Code Online (Sandbox Code Playgroud)

但是,这不是我想要的,我只想要过滤后的数据:

   Id   Name  Age Sex
1   2  Silke   33   F
2   3   Olga   22   F
Run Code Online (Sandbox Code Playgroud)

我怎么能用python做到这一点?


注意:我之所以要在python中导入过滤后的数据而不是过滤数据,是因为原始excel数据。excel表格中的过滤器非常复杂。它不仅基于许多列,还基于数千个不同的值。如果我在python中过滤数据将是一个大问题。

flo*_*urr 6

正如前面评论中提到的,一种非常快速和肮脏的方法是将过滤后的数据复制到一个新的 Excel 文件中(没有任何过滤器),并从这样的文件中获取数据。

一个更优雅和完整的解决方案包括使用openpyxl读取过滤数据。

首先,安装 openpyxl

$ pip install openpyxl
Run Code Online (Sandbox Code Playgroud)

然后,使用这样的脚本来读取可见数据:

from openpyxl import load_workbook

wb = load_workbook('foo.xlsx') # use the actual path of your workbook
ws = wb['Bar'] # use your sheet name instead of Bar

# iterate over all the rows in the sheet
for row in ws: 
    # use the row only if it has not been filtered out (i.e., it's not hidden)
    if ws.row_dimensions[row[0].row].hidden == False:
        print row # ...or do what you need
Run Code Online (Sandbox Code Playgroud)

请注意,这row是一个Cells元组。使用属性value访问每个单元格的值:

    if ws.row_dimensions[row[0].row].hidden == False:
        for cell in row:
            print cell.value 
Run Code Online (Sandbox Code Playgroud)

您可以使用该逻辑直接从原始过滤文件中获取您的值。

PS:openpyxl 还提供了一个很酷的Pandas 集成