【问题标题】:Skip specific set of columns when reading excel frame - pandas阅读 excel 框架时跳过特定的列集 - 熊猫
【发布时间】: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 是的。我可以确定要跳过的列的索引

标签: python excel python-3.x pandas


【解决方案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 KEEPcols 的所有重复列,这样:

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 并且发现其中一列是二进制图像字符串(我经常会遇到这种情况),这非常有用!
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多