我有一张excel表,看起来像是
然后,我在列Sex上创建了一个过滤器以获取所有女性数据,它看起来像:
然后,我想将过滤后的数据导入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中过滤数据将是一个大问题。
答案 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
请注意,row
是Cell
s的元组。使用属性value
访问每个单元格的值:
if ws.row_dimensions[row[0].row].hidden == False:
for cell in row:
print cell.value
您可以使用该逻辑直接从原始过滤文件中获取值。
PS:openpyxl还提供了一个很酷的Pandas integration开箱即用。