2013-09-11 3 views
5

Это вновь сформулированное версия моего вопроса, который мы надеемся, имеет смысл:панды подпорных индекс столбца при использовании usecols

При использовании read_csv с неявной индексом (т.е. первый столбец в файле не имеет заголовок), все работает, и я получаю dataframe, индекс которого является первым столбцом в файле - неявным столбцом индекса.

Однако, если указать usecols в качестве аргумента read_csv, неявный индекс столбца игнорируется, и возвращается dataframe имеет стандартный индекс, созданный панд (0, 1, 2, 3 и т.д.).

Я не могу явно передать индексный столбец в списке для usecols, а затем указать аргумент index_col, потому что неявный индексный столбец не имеет заголовка (так как панды знают, что это неявный индекс)!

Есть ли способ обойти это?

Вот оригинальный вопрос:

Я пытаюсь прочитать файл CSV, который имеет столбец строки индексов, которые не названы, остальные столбцы названы:

 |head1|head2| 
index1 | data1 | data2 | 

Когда я читаю в определенном количестве столбцов с помощью usecols, я также хочу включить индексы строк. Однако, поскольку они не названы, я не могу включить строку в свой список для usecols.

Я попытался сделать комбинацию целочисленного индекса и строк (например usecols = [0, 'header1', 'header2'], но это не похоже на работу.
Если я просто указать ind_col как 0, он будет использовать первый столбец в моем выборе в качестве индекса колонка.

Итак, как можно прочитать в выборе столбца имени (через usecols), сохраняя при этом первый, безымянный, столбец в файле, как мой индекс строки?

ответ

3

Try без использования 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*, как ПСР, а не просто |, чтобы не включать пробелы.

+0

Этот не проблема с разделителями, но с индексом, не имеющим заголовок. Скажем, я просто хотел импортировать столбец «head2», но сохранил индексный столбец как индекс в моей результирующей серии. Я могу сделать: pd.read_csv ('foo.csv', usecols = [0, 2], index_col [0]), но если я знаю только заголовки столбцов (а не позицию), я не могу: pd.read_csv ('foo.csv', usecols = [0, 'head2'], index_col [0]) – jramm

0

Если я понимаю, этот вопрос правильно, я думаю, вы должны прочитать весь файл CSV в качестве dataframe, а затем выберите столбцы, которые вы хотите .... Что-то вроде этого:

import pandas as pd 
df = pd.read_csv(yourdata, index_col=0).loc[:,'header1'] 
Смежные вопросы