2015-06-09 2 views
0

Я пытаюсь прочитать в csv-файле, используя read_csv. Я очень смущен, так как код работает, когда один из них вводится в csv вручную.Использование StringIO, отсутствие аргументов ключевого слова

from six.moves import cStringIO as StringIO 

Companies=""" 
Top,  Equipment, Users, Neither 
Company 1,  0,  0, 43 
Company 2,  0,  0, 32 
Company 3,  1,  3, 20 
Company 4,  9,  3, 9 
Company 5,  8,  7, 3 
Company 6,  2,  7, 8 
Company 7,  5,  2, 1 
Company 8,  1,  4, 1 
Company 9,  5,  1, 0 
Company 10,  1,  1, 3 
Company 11,  2,  2, 0 
Company 12,  0,  1, 1 
Company 13,  2,  0, 0 
Company 14,  1,  0, 0 
Company 15,  1,  0, 0 
Company 16,  0,  1, 0 
""" 

Использование:

df = pd.read_csv(StringIO(Companies), 
       skiprows=1, 
       skipinitialspace=True, 
       engine='python') 

^^ Вышеперечисленные работы!

Однако, когда я пытаюсь прочитать данные из отдельного csv, я продолжаю получать ошибки.

Я пробовал:

df = pd.read_csv(StringIO('MYDATA.csv', nrows=17, skiprows=1,skipinitialspace=True, delimiter=',')) 

и получил TypeError ошибки: StringIO() не принимает никаких аргументов ключевых слов Первоначально я получил TypeError ошибки: Должно быть Convertible в буфер, а не DataFrame, но я не могу помните, как я избавился от этой ошибки.

Я просмотрел документацию StringIO и другие сайты, включая: https://newcircle.com/bookshelf/python_fundamentals_tutorial/working_with_files, но я застрял!

ответ

2

Вы закрыли круглые скобки в неправильном месте:

df = pd.read_csv(StringIO('MYDATA.csv', nrows=17, skiprows=1,skipinitialspace=True, delimiter=',')) 
#      ^  ^not closed here 

Вы бы переместить закрывающую скобку, чтобы закрыть StringIO() вызов и оставить именованные аргументы для pd.read_csv() вызова:

df = pd.read_csv(StringIO('MYDATA.csv'), nrows=17, skiprows=1,skipinitialspace=True, delimiter=',') 

Примечания что StringIO('MYDATA.csv') создает файл в памяти с содержимым MYDATA.csv; это не открыть файл с этим именем файла. Если вы хотите, чтобы открыть файл в файловой системе под названием MYDATA.csv, вам нужно оставить от на StringIO вызов:

df = pd.read_csv('MYDATA.csv', nrows=17, skiprows=1, skipinitialspace=True, delimiter=',') 
+0

Oh дух! Я чувствую себя глупо. Исправлено это, но теперь я получаю ValueError: Нет столбцов для разбора из файла. Я попытался возиться и добавить кодировку = 'utf-16', но это может быть не тот код, который я ищу, знаете ли вы что-нибудь о том, как это исправить? – jenryb

+0

@jenryb: вы сейчас открываете файл или используете 'StringIO()'? –

+0

Все еще используется StringIO(). Должен ли я сначала открыть файл? Это имело бы смысл, поскольку оригинал был доступен внутри кода. Я бы напечатал: open ('MYDATA.csv', 'rb') как f? Затем вызовите f в StringIO? – jenryb

Смежные вопросы