阅读excel框架时跳过特定的列集-Pandas

olmpazwi  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(263)

我事先知道Excel文件中哪些列是不需要的,我希望在阅读文件时避免这些列,以提高性能。

import pandas as pd
df = pd.read_excel('large_excel_file.xlsx', skip_cols=['col_a', 'col_b',...,'col_zz'])

文档中没有与此相关的内容。是否有解决方法?

mwyxok5s

mwyxok5s1#

如果您的panda版本允许(首先检查是否可以向usecols传递一个函数),我会尝试如下操作:

import pandas as pd
df = pd.read_excel('large_excel_file.xlsx', usecols=lambda x: 'Unnamed' not in x,)

这将跳过所有没有标题名称的列。您可以用不需要的列名列表替换“未命名”。

ffx8fchx

ffx8fchx2#

你可以使用下面的技巧:让我们不想要(想跳过)的列是2 5 8,然后找到所有我们不想保留的剩余列cols,使得:

In [7]: cols2skip = [2,5,8]  
In [8]: cols = [i for i in range(10) if i not in cols2skip]

In [9]: cols
Out[9]: [0, 1, 3, 4, 6, 7, 9]

然后我们可以使用usecols来使用那些剩余的列(我们不想保留):

df = pd.read_excel(filename, usecols=cols)
jtjikinw

jtjikinw3#

如果你使用read_excel,使用一个函数来过滤列肯定更容易,就像MarMat的答案一样。他们的答案应该稍微改变一下,以适应OP中的情况,在OP中skip_cols应该被忽略。

skip_cols = ['col_a', 'col_b',...,'col_zz']
df = pd.read_excel('Book1.xlsx', usecols=lambda x: x not in skip_cols)

您还可以通过传递nrows=0只读取Excel文件的列,然后使用Index.difference提取所需的列。

cols = pd.read_excel('Book1.xlsx', nrows=0).columns
df = pd.read_excel('Book1.xlsx', usecols=cols.difference(skip_cols))

相关问题