5

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

当使用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),同时保留文件中的第一个无名列作为我的行索引?

4

3 回答 3

4

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

data = pd.read_csv('advertising.csv', header=0, index_col=[0] , usecols=['Unnamed: 0', 'radio','sales'])
于 2020-02-14T18:36:47.623 回答
3

尝试不使用 usecols,有一个已知错误,这意味着这不适用于除,.

你可以直接阅读这些:

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*as sep 而不是仅仅|为了不包含空格。

于 2013-09-11T11:21:34.503 回答
1

如果我正确理解了这个问题,我认为您可能必须将整个 csv 文件作为数据框读取,然后选择您想要的列......像这样:

import pandas as pd
df = pd.read_csv(yourdata, index_col=0).loc[:,'header1']
于 2016-02-12T20:34:44.567 回答