#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)