【问题标题】:Select specific CSV columns (Filtering) - Python/pandas选择特定的 CSV 列(过滤) - Python/pandas
【发布时间】:2014-04-19 03:07:38
【问题描述】:

我有一个包含 100 列的非常大的 CSV 文件。为了说明我的问题,我将使用一个非常基本的示例。

假设我们有一个 CSV 文件。

in  value   d     f
0    975   f01    5
1    976   F      4
2    977   d4     1
3    978   B6     0
4    979   2C     0

我想选择一个特定的列。

import pandas
data = pandas.read_csv("ThisFile.csv")

为了选择我使用的前 2 列

data.ix[:,:2]

为了选择不同的列,例如第 2 列和第 4 列。我该怎么办?

还有另一种方法可以通过重写 CSV 文件来解决此问题。但这是一个巨大的文件;所以我要避免这种方式。

【问题讨论】:

  • 你不能说data.valuedata.f吗?这就是你要的吗?

标签: python csv pandas


【解决方案1】:

这会选择第二列和第四列(因为 Python 使用从 0 开始的索引):

In [272]: df.iloc[:,(1,3)]
Out[272]: 
   value  f
0    975  5
1    976  4
2    977  1
3    978  0
4    979  0

[5 rows x 2 columns]

df.ix 可以按位置或标签选择。 df.iloc 总是按位置选择。按位置索引时,使用df.iloc 更明确地表明您的意图。由于 Pandas 不必检查您的索引是否使用标签,因此速度也更快。


另一种可能是使用usecols 参数:

data = pandas.read_csv("ThisFile.csv", usecols=[1,3])

这只会将第二列和第四列加载到data DataFrame 中。

【讨论】:

  • 谢谢!最后一件事,我在尝试 iloc 时遇到了问题,我遇到了这个问题。 “IndexError:索引过多”
  • 如果括号被省略,您可能会收到错误“Too many indexers”,如df.iloc[:,1,3]
【解决方案2】:

如果您更愿意按名称选择列,则可以使用

data[['value','f']]

   value  f
0    975  5
1    976  4
2    977  1
3    978  0
4    979  0

【讨论】:

    【解决方案3】:

    正如Wai Yip Tung所说,您可以在读取时通过指定列的名称来过滤数据框,例如:

    import pandas as pd
    data = pd.read_csv("ThisFile.csv")[['value','d']]
    

    这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2018-09-10
      • 1970-01-01
      • 2016-05-28
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多