我事先知道Excel文件中哪些列是不需要的,我希望在阅读文件时避免这些列,以提高性能。
import pandas as pd df = pd.read_excel('large_excel_file.xlsx', skip_cols=['col_a', 'col_b',...,'col_zz'])
文档中没有与此相关的内容。是否有解决方法?
mwyxok5s1#
如果您的panda版本允许(首先检查是否可以向usecols传递一个函数),我会尝试如下操作:
import pandas as pd df = pd.read_excel('large_excel_file.xlsx', usecols=lambda x: 'Unnamed' not in x,)
这将跳过所有没有标题名称的列。您可以用不需要的列名列表替换“未命名”。
ffx8fchx2#
你可以使用下面的技巧:让我们不想要(想跳过)的列是2 5 8,然后找到所有我们不想保留的剩余列cols,使得:
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来使用那些剩余的列(我们不想保留):
usecols
df = pd.read_excel(filename, usecols=cols)
jtjikinw3#
如果你使用read_excel,使用一个函数来过滤列肯定更容易,就像MarMat的答案一样。他们的答案应该稍微改变一下,以适应OP中的情况,在OP中skip_cols应该被忽略。
read_excel
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提取所需的列。
nrows=0
Index.difference
cols = pd.read_excel('Book1.xlsx', nrows=0).columns df = pd.read_excel('Book1.xlsx', usecols=cols.difference(skip_cols))
3条答案
按热度按时间mwyxok5s1#
如果您的panda版本允许(首先检查是否可以向usecols传递一个函数),我会尝试如下操作:
这将跳过所有没有标题名称的列。您可以用不需要的列名列表替换“未命名”。
ffx8fchx2#
你可以使用下面的技巧:让我们不想要(想跳过)的列是2 5 8,然后找到所有我们不想保留的剩余列
cols
,使得:然后我们可以使用
usecols
来使用那些剩余的列(我们不想保留):jtjikinw3#
如果你使用
read_excel
,使用一个函数来过滤列肯定更容易,就像MarMat的答案一样。他们的答案应该稍微改变一下,以适应OP中的情况,在OP中skip_cols
应该被忽略。您还可以通过传递
nrows=0
只读取Excel文件的列,然后使用Index.difference
提取所需的列。