Пропустить строки во время импорта csv pandas

99

Я пытаюсь импортировать файл .csv pandas.read_csv(), но не хочу импортировать вторую строку файла данных (строку с индексом = 1 для 0-индексации).

Я не понимаю, как не импортировать его, потому что аргументы, используемые с командой, кажутся неоднозначными:

С сайта панд:

skiprows : список или целое число

Номера строк, которые нужно пропустить (с индексом 0), или количество строк, которые нужно пропустить (int) в начале файла ».

Если я введу skiprows=1аргументы, как он узнает, пропустить ли первую строку или пропустить строку с индексом 1?

люминофор
источник
2
Я бы предположил, что, поскольку он заявляет, что он может быть «списковым или целым», а затем дает вам два варианта (либо пропустить строки, либо пропустить # строки в начале), тогда, если вы дадите ему список [1], он просто пропустит строку 1 (2 ряд). Если бы вы дали ему целое число (например, 10), он пропустил бы первые 10 строк.
Ffisegydd
1
Отлично, что сработало. Огромное спасибо. Просто интересно, как это будет различать индекс и int. [] - это ответ.
thosphor

Ответы:

150

Можете попробовать сами:

>>> import pandas as pd
>>> from StringIO import StringIO
>>> s = """1, 2
... 3, 4
... 5, 6"""
>>> pd.read_csv(StringIO(s), skiprows=[1], header=None)
   0  1
0  1  2
1  5  6
>>> pd.read_csv(StringIO(s), skiprows=1, header=None)
   0  1
0  3  4
1  5  6
алко
источник
Да, спасибо, мне просто нужно было знать, что индекс указан в квадратных скобках [].
thosphor
11
на Python 3: from io import StringIO
Дима Литуев
^ Нет необходимости импортировать вообще, он доступен напрямую как pd.compat.StringIO .
cs95 08
30

У меня еще нет репутации, чтобы комментировать, но я хочу добавить в ответ alko для дальнейшего использования.

Из документов :

skiprows: набор чисел для строк в файле, которые нужно пропустить. Также может быть целым числом, чтобы пропустить первые n строк

Хьюго
источник
14

У меня такая же проблема при запуске скипроунов при чтении файла csv. Я делал skip_rows = 1, это не сработает

Простой пример дает представление о том, как использовать skiprows при чтении файла csv.

import pandas as pd

#skiprows=1 will skip first line and try to read from second line
df = pd.read_csv('my_csv_file.csv', skiprows=1)  ## pandas as pd

#print the data frame
df
Вирадж Вадате
источник
1

Во всех этих ответах упускается один важный момент: n-я строка - это n-я строка в файле, а не n-я строка в наборе данных. У меня есть ситуация, когда я загружаю некоторые устаревшие данные водомеров из Геологической службы США. Заголовок набора данных комментируется знаком «#», первая строка после нее - метки, следующая идет строка, описывающая типы дат, и последняя - сами данные. Я никогда не знаю, сколько там строк комментариев, но я знаю, что это за первая пара строк. Пример:

----------------------------- ВНИМАНИЕ -------------------- --------------

Некоторые из данных, которые вы получили из этой базы данных Геологической службы США

возможно, не получил одобрения директора. ... agency_cd site_no datetime tz_cd 139719_00065 139719_00065_cd

5s 15s 20d 6s 14n 10s USGS 08041780 2018-05-06 00:00 CDT 1.98 A

Было бы неплохо, если бы был способ автоматически пропускать как n-ю строку, так и n-ю строку.

В качестве примечания я смог исправить свою проблему с помощью:

import pandas as pd
ds = pd.read_csv(fname, comment='#', sep='\t', header=0, parse_dates=True)
ds.drop(0, inplace=True)
EBo
источник
-1

skip[1] пропустит вторую строку, а не первую.

хвостовик
источник
-8

Также убедитесь, что ваш файл на самом деле является файлом CSV. Например, если у вас есть файл .xls, и вы просто изменили расширение файла на .csv, файл не будет импортирован и выдаст ошибку, указанную выше. Чтобы убедиться, что это ваша проблема, откройте файл в Excel, и он, скорее всего, скажет:

«Формат файла и расширение 'Filename.csv' не совпадают. Файл может быть поврежден или небезопасен. Если вы не доверяете его источнику, не открывайте его. Вы все равно хотите открыть?»

Чтобы исправить файл: откройте файл в Excel, нажмите «Сохранить как», выберите формат файла для сохранения (используйте .cvs), затем замените существующий файл.

Это была моя проблема, и я исправил ошибку.

Джастин Р. Локк
источник
10
Возможно, это была ваша проблема, но она не имеет ничего общего с вопросом и не пытается на него ответить. Это просто объясняет некоторые другие дополнительные проблемы, которые у вас были. Вы также можете сказать: «Также не забудьте зарядить свой ноутбук, у меня не было батареи, и я потерял все свои изменения. Это была моя проблема»
JC Rocamonde