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

时间:2017-09-01 14:13:27

标签: python excel

我有一张excel表,看起来像是

enter image description here

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

enter image description here

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

df = pd.read_excel(io="test.xlsx", sheetname="Sheet1")
print(df)

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

   Id   Name  Age Sex
0   1    Tom   12   M
1   2  Silke   33   F
2   3   Olga   22   F
3   4    Tom   33   M

然而,这不是我想要的,我只想要过滤数据:

   Id   Name  Age Sex
1   2  Silke   33   F
2   3   Olga   22   F

如何使用python执行此操作?

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

1 个答案:

答案 0 :(得分:4)

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

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

首先,安装openpyxl

$ pip install openpyxl

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

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

请注意,rowCell s的元组。使用属性value访问每个单元格的值:

    if ws.row_dimensions[row[0].row].hidden == False:
        for cell in row:
            print cell.value 

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

PS:openpyxl还提供了一个很酷的Pandas integration开箱即用。