2012-12-05 11 views
6

Poniżej zamieszczam przykłady z książki Python do analizy danych. Konkretnie, baza danych wyborów z 2012 r. Z rozdziału 9. Dane znajdują się w dużym pliku csv, rozdzielonym przecinkiem. Ale każda linia pliku ma dodatkowy końcowy separator, który wydaje się mylić pandas.read_csv.python pandy - ograniczanie końcowe myli read_csv

Traktuje dodatkowy ogranicznik jakby tam dodatkowa kolumna. Jest więc jeszcze jedna kolumna, niż wymagają nagłówki. Następnie pandas.read_csv przyjmuje pierwszą kolumnę jako etykiety wiersza. Ogólny efekt jest taki, że kolumny i nagłówki nie są już wyrównane - pierwsza kolumna staje się etykietami wierszy, druga kolumna jest nazwana przez pierwszy nagłówek itd.

To dość denerwujące. Każdy pomysł, jak powiedzieć pandas.read_csv zrobić dobrze? Nie mogłem go znaleźć.

Wielka książka, BTW.

Odpowiedz

2

stworzyłem GitHub problemu aby spojrzeć na tę kwestię przenoszenia automatycznie:

https://github.com/pydata/pandas/issues/2442

myślę FEC format nieznacznie zmienione powodując ten przykry issue-- jeśli używasz jednej zamieszczone tutaj http://github.com/pydata/pydata-book mam nadzieję, że nie będzie miał tego problemu.

+0

Dobrze wiedzieć, że istnieje repozytorium github dla książki. Dzięki, Wes. – edwardw

+0

Po prostu powiedziałem, że ten problem występuje w innych lokalizacjach; Właśnie pobrałem niektóre dane pogodowe z witryny NOAA Climate, a koniec każdego pliku CSV zawiera dodatkowy przecinek. Wymyśliłem to samo obejście wymienione powyżej. To denerwujące i zajęło mi trochę czasu, aby dowiedzieć się, dlaczego read_csv() nie działa. – user2072880

3

Cóż, istnieje bardzo proste obejście tego problemu. Dodaj dumną kolumnę do nagłówka, gdy czytasz plik csv w:

cols = ... 
cols.append('') 
records = pandas.read_csv('filename.txt', skiprows=1, names=cols) 

Następnie kolumny i nagłówek zostaną wyrównane ponownie.

6

Dla każdego, kto wciąż znajduje to. Wes napisał na ten temat blogpost. Problem, jeśli w wierszu znajduje się jedna wartość zbyt wiele, traktowana jest jako nazwa wiersza.

To zachowanie można zmienić, ustawiając index_col=False jako opcję na read_csv.

Powiązane problemy