阅读 excel 框架时跳过特定的列集 - 熊猫
Posted
技术标签:
【中文标题】阅读 excel 框架时跳过特定的列集 - 熊猫【英文标题】:Skip specific set of columns when reading excel frame - pandas 【发布时间】:2018-09-15 13:38:24 【问题描述】:我事先知道我不需要 Excel 文件中的哪些列,并且我想在读取文件时避免使用它们以提高性能。像这样的:
import pandas as pd
df = pd.read_excel('large_excel_file.xlsx', skip_cols=['col_a', 'col_b',...,'col_zz'])
文档中没有与此相关的内容。有什么解决方法吗?
【问题讨论】:
可以改用usecols
参数吗?
@Aran-Fey 有可能,但与未使用的列列表相比,要使用的列列表会非常大(160 对 30)
您知道要跳过的列的索引(位置)吗?
@MaxU 是的。我可以确定要跳过的列的索引
重复***.com/questions/24366449/…
【参考方案1】:
如果您的熊猫版本允许(首先检查您是否可以将函数传递给 usecols),我会尝试类似:
import pandas as pd
df = pd.read_excel('large_excel_file.xlsx', usecols=lambda x: 'Unnamed' not in x,)
这应该会跳过所有没有标题名称的列。您可以用您不想要的列名列表替换“未命名”。
【讨论】:
请注意usecols
接受列字母作为参数:usecols = "A,C:AA"【参考方案2】:
您可以使用以下技术。让我们不想(想跳过)的列是 2 5 8,然后找到我们 DO WANT TO KEEP 为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)
【讨论】:
我认为这比@MarMat 更“Pythonic”,因为它在 2 行中使用可读的列表理解,而其他使用 lambda。如果您可以使用列表推导,我的理解总是避免在 Python 中使用 lambda,而 lambda 很少快得多。如果您希望其他人更快地理解您的代码,恕我直言,这将更容易。如果您正在处理 Excel 并且发现其中一列是二进制图像字符串(我经常会遇到这种情况),这非常有用!以上是关于阅读 excel 框架时跳过特定的列集 - 熊猫的主要内容,如果未能解决你的问题,请参考以下文章
在 Beautifulsoup 中执行 findAll() 时跳过特定元素的内容