这是我的问题的措辞版本,希望更有意义:
当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)同时保留文件中的第一个无名列作为我的行索引?
答案 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")