Запретить read_csv пандам рассматривать первую строку как заголовок имен столбцов

Я читаю в pandas DataFrame, используя pd.read_csv. Я хочу сохранить первую строку в качестве данных, однако она преобразуется в имена столбцов.

  • Я попробовал header=False, но это полностью удалило его.

(Обратите внимание на мои входные данные: у меня есть строка (st = '\n'.join(lst)), которую я преобразую в файлоподобный объект (io.StringIO(st)), а затем создаю csv из этого файлового объекта.)

Ответ 1

Вы хотите header=None False получает тип, продвигаемый до int в 0, см. docs:

header: int или список ints, default 'infer Число строк, которые будут использоваться как имена столбцов и начало данных. Поведение по умолчанию выглядит так, как будто установлен в 0, если имена не пройдены, в противном случае Нет. Явно передаю header = 0 чтобы иметь возможность заменить существующие имена. Заголовок может быть списком целые числа, указывающие расположение строк для мультииндекса на столбцах например [0,1,3]. Промежуточные строки, которые не указаны, будут пропущены (например, 2 в этом примере пропускается). Обратите внимание, что этот параметр игнорирует прокомментированные строки и пустые строки, если skip_blank_lines = True, поэтому header = 0 обозначает первую строку данных, а не первую строку файла.

Вы можете видеть разницу в поведении, сначала с header=0:

In [95]:
import io
import pandas as pd
t="""a,b,c
0,1,2
3,4,5"""
pd.read_csv(io.StringIO(t), header=0)

Out[95]:
   a  b  c
0  0  1  2
1  3  4  5

Теперь с None:

In [96]:
pd.read_csv(io.StringIO(t), header=None)

Out[96]:
   0  1  2
0  a  b  c
1  0  1  2
2  3  4  5

Обратите внимание, что в последней версии 0.19.1 теперь будет отображаться TypeError:

In [98]:
pd.read_csv(io.StringIO(t), header=False)

TypeError: передача заголовка bool недопустима. Использовать header = None для no header или header = int или list-like из int, чтобы указать строку (строки), создающую имена столбцов

Ответ 2

Мне кажется, вам нужен параметр header=None для read_csv:

Пример:

import pandas as pd
from pandas.compat import StringIO

temp=u"""a,b
2,1
1,1"""

df = pd.read_csv(StringIO(temp),header=None)
print (df)
   0  1
0  a  b
1  2  1
2  1  1