Pomiń wiersze podczas importu csv

99

Próbuję zaimportować plik .csv za pomocą pandas.read_csv(), ale nie chcę importować drugiego wiersza pliku danych (wiersz z indeksem = 1 dla indeksowania 0).

Nie widzę, jak go nie importować, ponieważ argumenty użyte w poleceniu wydają się niejednoznaczne:

Ze strony pandy:

skiprows : lista lub liczba całkowita

Numery wierszy do pominięcia (indeksowane 0) lub liczba wierszy do pominięcia (liczba całkowita) na początku pliku. "

Jeśli wstawię skiprows=1argumenty, skąd będzie wiedzieć, czy pominąć pierwszy wiersz, czy pominąć wiersz z indeksem 1?

tosfor
źródło
2
Wydaje mi się, że ponieważ stwierdza, że ​​może to być "lista lub liczba całkowita", a następnie daje dwie opcje (pomiń wiersze lub pomiń # wiersze na początku), a jeśli dasz jej listę [1], po prostu pominie wiersz 1 (drugi rząd). Jeśli podasz mu liczbę całkowitą (na przykład 10), to pominie pierwsze 10 wierszy.
Ffisegydd
1
Świetnie, że zadziałało. Dziękuję bardzo. Zastanawiałem się tylko, jak to rozróżnia indeks i int. [] jest odpowiedzią.
thosphor

Odpowiedzi:

150

Możesz spróbować samemu:

>>> 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
alko
źródło
Tak, dzięki, po prostu potrzebowałem wiedzieć, że indeks został określony w nawiasach kwadratowych [].
thosphor
11
w Pythonie 3: from io import StringIO
Dima Lituiev
^ Nie ma potrzeby importowania w ogóle, jest bezpośrednio dostępny jako pd.compat.StringIO .
cs95
30

Nie mam jeszcze reputacji do komentowania, ale chcę dodać odpowiedź do alko w celu uzyskania dalszych informacji.

Z dokumentów :

skiprows: Zbiór liczb dla wierszy w pliku do pominięcia. Może być również liczbą całkowitą, aby pominąć pierwsze n wierszy

Hugo
źródło
14

Ten sam problem wystąpił podczas uruchamiania skiprows podczas czytania pliku csv. Wkładałem skip_rows = 1 to nie zadziała

Prosty przykład daje wyobrażenie, jak korzystać z pomiń podczas odczytu pliku 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
Viraj Wadate
źródło
1

Wszystkie te odpowiedzi pomijają jeden ważny punkt - n-ty wiersz to n-ty wiersz w pliku, a nie n-ty wiersz w zbiorze danych. Mam sytuację, w której pobieram z USGS przestarzałe dane miernika strumienia. Początek zbioru danych jest oznaczony znakiem „#”, pierwszy wiersz po nim to etykiety, następnie wiersz opisujący typy dat, a na końcu same dane. Nigdy nie wiem, ile jest wierszy komentarza, ale wiem, jakie są pierwsze kilka wierszy. Przykład:

----------------------------- OSTRZEŻENIE -------------------- --------------

Niektóre dane uzyskane z bazy danych US Geological Survey

mógł nie otrzymać zgody dyrektora. ... 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

Byłoby miło, gdyby istniał sposób na automatyczne pominięcie n-tego wiersza, a także n-tego wiersza.

Uwaga, udało mi się rozwiązać problem z:

import pandas as pd
ds = pd.read_csv(fname, comment='#', sep='\t', header=0, parse_dates=True)
ds.drop(0, inplace=True)
EBo
źródło
-1

skip[1] pominie drugą linię, a nie pierwszą.

shanky
źródło
-8

Upewnij się również , że plik jest w rzeczywistości plikiem CSV. Na przykład, jeśli masz plik .xls i po prostu zmienisz rozszerzenie pliku na .csv, plik nie zostanie zaimportowany i wyświetli powyższy błąd. Aby sprawdzić, czy to jest twój problem, otwórz plik w programie Excel i prawdopodobnie powie:

„Format i rozszerzenie pliku„ Nazwa pliku.csv ”nie są zgodne. Plik może być uszkodzony lub niebezpieczny. Nie otwieraj go, jeśli nie ufasz jego źródłu. Czy mimo to chcesz go otworzyć?”

Aby naprawić plik: otwórz plik w programie Excel, kliknij „Zapisz jako”, wybierz format pliku do zapisania (użyj .cvs), a następnie zastąp istniejący plik.

To był mój problem i naprawił błąd za mnie.

Justin R. Locke
źródło
10
To mógł być twój problem, ale nie ma to nic wspólnego z pytaniem ani z próbą odpowiedzi. To po prostu wyjaśnia inny dodatkowy problem, który miałeś. Możesz też powiedzieć „pamiętaj też o naładowaniu laptopa, mój nie miał baterii i straciłem wszystkie zmiany. To był mój problem”
JC Rocamonde