Панды читают в таблице без заголовков

#python #pandas

Вопрос:

Как я могу читать в файле .csv (без заголовков) и когда мне нужно только подмножество столбцов (скажем, 4-й и 7-й из 20 столбцов), используя панд? Кажется, я не могу этого сделать usecols

Ответ №1:

Чтобы прочитать csv-файл, в котором нет заголовка, и только для определенных столбцов вам нужно передать параметры header=None , а usecols=[3,6] для 4-го и 7-го столбцов:

 df = pd.read_csv(file_path, header=None, usecols=[3,6])
 

Смотрите документы

Комментарии:

1. Нашел ваше решение полезным. Это ново для меня ==> usecols=[3,6].

Ответ №2:

Предыдущие ответы были хорошими и правильными, но, на мой взгляд, дополнительный names параметр сделает его идеальным, и это должен быть рекомендуемый способ, особенно когда csv не имеет headers .

Решение

Использование usecols и names параметры

 df = pd.read_csv(file_path, usecols=[3,6], names=['colA', 'colB'])
 

Дополнительное чтение

или используйте header=None , чтобы явно сказать людям, что csv у него нет заголовков (в любом случае обе строки идентичны)

 df = pd.read_csv(file_path, usecols=[3,6], names=['colA', 'colB'], header=None)
 

Чтобы вы могли получить свои данные с помощью

 # with `names` parameter
df['colA']
df['colB'] 
 

вместо

 # without `names` parameter
df[0]
df[1]
 

Объяснять

На основе read_csv, когда names передаются явно, то header будут вести себя как None вместо 0 , поэтому можно пропустить header=None , когда names существуют.

Комментарии:

1. Я действительно не понимаю, почему это так неясно объясняется в документах. Они упомянули header=None там только один раз, и это: «тогда поведение идентично header=None «. Но что это за поведение? Об этом просто не упоминается. Должен ли я относиться к нему так, как я должен header=None вообще избегать его использования, а names вместо этого использовать?

2. Это должен быть общепринятый ответ, names пример очень нужен. За этот ответ следует проголосовать.

Ответ №3:

Убедитесь, что вы указали pass header=None и add usecols=[3,6] для 4-го и 7-го столбцов.

Ответ №4:

Согласно документации https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html : заголовок, список int, номера строк по умолчанию «вывод» для использования в качестве имен столбцов и начало данных. Поведение по умолчанию заключается в выводе имен столбцов: если имена не передаются, поведение идентично заголовку=0, а имена столбцов выводятся из первой строки файла, если имена столбцов передаются явно, то поведение идентично заголовку=Нет. Явно передайте заголовок=0, чтобы иметь возможность заменять существующие имена. Заголовок может представлять собой список целых чисел, которые указывают расположение строк для мультииндекса в столбцах, например [0,1,3]. Промежуточные строки, которые не указаны, будут пропущены (например, в этом примере пропущено 2). Обратите внимание, что этот параметр игнорирует строки с комментариями и пустые строки, если skip_blank_lines=True, поэтому заголовок=0 обозначает первую строку данных, а не первую строку файла.

список имен, подобный списку имен, необязательный список имен столбцов для использования. Если файл содержит строку заголовка, то вы должны явно передать значение header=0, чтобы переопределить имена столбцов. Дубликаты в этом списке не допускаются.

 columts = ['Day', 'PLMN', 'RNCname']
tempo = pd.read_csv("info.csv", sep=';', header=0, names=columts, index_col=False)