Пропустити рядки під час папок імпорту CSV


98

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

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

З веб-сайту панди:

skiprows : подібний до списку або ціле число

Номери рядків, які потрібно пропустити (з індексом 0), або кількість рядків, які потрібно пропустити (int) на початку файлу. "

Якщо я вклав skiprows=1аргументи, звідки він знає, пропускати перший рядок чи пропускати рядок з індексом 1?


2
Я гадаю, що, як вказано, він може бути "подібним до списку або цілим числом", а потім надає вам два варіанти (або пропустити рядки, або пропустити # рядки на початку), тоді якщо ви надасте йому список [1], він просто пропустить рядок 1 (2-й ряд). Якби ви дали йому ціле число (наприклад, 10), тоді він пропустив би перші 10 рядків.
Ffisegydd

1
Чудово, що спрацювало. Дуже дякую. Просто дивувався, як це буде відрізняти індекс від int. [] - це відповідь.
тосфор

Відповіді:


149

Ви можете спробувати самі:

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

Так, дякую, мені просто потрібно було знати, що індекс вказаний у квадратних дужках [].
тосфор

11
у Python 3: from io import StringIO
Діма Літуєв

^ Не потрібно імпортувати взагалі, він безпосередньо доступний як pd.compat.StringIO .
cs95,

30

У мене ще немає репутації, щоб коментувати, але я хочу додати до алкоголю відповідь для подальшої довідки.

З документів :

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


14

Я отримав ту ж проблему під час запуску skiprows під час читання файлу 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-й рядок у наборі даних. У мене ситуація, коли я завантажую застарілі дані датчика потоку з USGS. Заголовок набору даних коментується символом "#", перший рядок після цього - мітки, далі йде рядок, що описує типи дат, і останні дані. Я ніколи не знаю, скільки є рядків коментарів, але я знаю, які перші пари рядків. Приклад:

----------------------------- УВАГА -------------------- --------------

Деякі дані, отримані з цієї бази даних Геологічної служби США

можливо, не отримав схвалення директора. ... 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)


-8

Також переконайтеся, що ваш файл насправді є файлом CSV. Наприклад, якщо у вас був файл .xls, і ви просто змінили розширення файлу на .csv, файл не імпортуватиметься і видасть помилку вище. Щоб перевірити, чи це ваша проблема, відкрийте файл у Excel, і він, швидше за все, скаже:

"Формат файлу та розширення" Filename.csv "не збігаються. Файл може бути пошкоджений або небезпечний. Якщо ви не довіряєте його джерелу, не відкривайте його. Хочете все-таки відкрити?"

Щоб виправити файл: відкрийте файл у програмі Excel, натисніть «Зберегти як», виберіть формат файлу, який потрібно зберегти як (використовуйте .cvs), а потім замініть наявний файл.

Це була моя проблема, і мені було виправлено помилку.


10
Можливо, це була ваша проблема, але це не має нічого спільного із запитанням, ні спробами відповісти на нього. Це просто пояснює деякі інші додаткові проблеми, які ви мали. Ви також можете сказати "також пам’ятайте зарядити свій ноутбук, у мене не було акумулятора, і я втратив усі зміни. Це була моя проблема"
JC Rocamonde
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.