使用usecols时,pandas保留索引列

时间:2013-09-11 11:07:21

标签: python pandas

这是我的问题的措辞版本,希望更有意义:

read_csv使用隐式索引(即文件中的第一列没有标题)时,一切正常,我得到一个数据框,其索引是文件中的第一列 - 隐式索引列

但是,如果我将usecols指定为read_csv的参数,则忽略隐式索引列,并且返回的数据帧具有由pandas(0,1,2,3等)创建的标准索引

我无法显式传递usecols列表中的索引列,然后指定index_col参数,因为隐式索引列没有标题(这就是pandas知道它是隐式索引的方式)!

有什么方法吗?

以下是原始问题:

我正在尝试读取一个csv文件,该文件有一列没有命名的行索引,其余列名称为:

       |head1|head2|
index1 | data1 | data2 |

当我使用usecols读取一定数量的列时,我还想包含行索引。但是,由于这些没有命名,我不能在我的列表中包含usecols字符串。

我尝试过整数索引和字符串的组合(例如usecols = [0, 'header1', 'header2']但这似乎不起作用。
如果我只是将ind_col指定为0,它将使用我选择的第一列作为索引列。

那么,我如何读取名称列选择(通过usecols)同时保留文件中的第一个无名列作为我的行索引?

3 个答案:

答案 0 :(得分:3)

尝试不使用usecols,有a known bug which means this won't work with a separator other than ,

您可以直接阅读这些内容:

In [11]: pd.read_csv('foo.csv', sep='\s*\|\s*', index_col=[0])
Out[11]: 
        head1  head2  Unnamed: 3
index1  data1  data2         NaN

In [12]: pd.read_csv('foo.csv', sep='\s*\|\s*', index_col=[0]).dropna(axis=1)
Out[12]: 
        head1  head2
index1  data1  data2

注意:我必须使用\s*|\s*作为sep,而不仅仅是|,以便不包含空格。

答案 1 :(得分:3)

我最近也遇到了同样的问题,并且能够使用熊猫默认的未命名方法解决此问题。

data = pd.read_csv('advertising.csv', header=0, index_col=[0] , usecols=['Unnamed: 0', 'radio','sales'])

答案 2 :(得分:0)

If I understand this question correctly, I think you may have to read in the entire csv file as a dataframe and then select the columns that you want.... Something like this:

Date.parse("0/mm/yyyy")