2014-03-14 248 views
7

我有一个非常大的CSV文件,100列。为了说明我的问题,我将使用一个非常基本的例子。选择特定的CSV列(筛选) - Python /熊猫

假设我们有一个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] 

为了选择如第二和第四不同的列。我该怎么办?

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

+0

不能你说,'data.value'和'data.f'?这是你要求的吗? – ycy

回答

11

此选择第二和第四列(自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

+0

谢谢!最后一件事,当trynig iloc出现问题时,我遇到了这个问题。 “IndexError:索引太多” – user3378649

+0

如果省略括号,您可能会收到错误“太多索引*”,例如'df.iloc [:,1,3]'。 – unutbu

4

如果您选择而不是按名称栏,您可以使用

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

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