2015-10-30 21 views
11

Chcę przeczytać w bardzo dużym csv (nie można otworzyć w programie Excel i łatwo edytować), ale gdzieś w okolicach 100 000-ego wiersza znajduje się wiersz z jedną dodatkową kolumną powodującą awarię programu. Ten wiersz jest błędny, więc potrzebuję sposobu, aby zignorować fakt, że była to dodatkowa kolumna. Istnieje około 50 kolumn, więc kodowanie na twardym dysku nagłówków i używanie nazw lub zestawów nie jest preferowane. Będę też mógł napotkać ten problem w innych CSV i chcę ogólnego rozwiązania. Nie mogłem znaleźć nic w read_csv niestety. Kod jest tak proste, jak to:Pandas dataframe read_csv na złe dane

def loadCSV(filePath): 
    dataframe = pd.read_csv(filePath, index_col=False, encoding='iso-8859-1', nrows=1000) 
    datakeys = dataframe.keys(); 
    return dataframe, datakeys 
+0

Potrzebujesz 'error_bad_lines = False' aby pominąć błędne dane – EdChum

Odpowiedz

28

przejściu error_bad_lines=False pominąć błędnych wierszy:

error_bad_lines: Boolean, domyślna True liniach o zbyt wielu dziedzinach (np linia CSV ze zbyt wielu przecinkami) domyślnie spowoduje zgłoszenie wyjątku , a DataFrame nie zostanie zwrócona. Jeśli False, , to te "złe linie" zostaną usunięte z DataFrame, która jest zwrócona. (Działa tylko z parserem C)

+0

Zapomniałem o tym wspomnieć. Będzie działać dla tego, co aktualnie chcę zrobić, ale zejdę z drogi i będę potrzebował rzędu bez dodatkowej wartości dodatkowej. – Fonti

+0

Alternatywą jest odczyt pojedynczej linii, aby uzyskać prawidłową liczbę kolorów, a następnie ponowne odczytanie w celu odczytania tylko tych kolumn, np. cols = pd.read_csv (file, nrows = 1) .columns df = pd.read_csv (file, usecols = cols) 'to zignoruje dodatkową kolumnę, którą myślę dla tej linii błędu spróbuj i daj mi znać, czy to działa dla ciebie – EdChum

+1

@Fonti: Nie ma opcji dla 'truncate_bad_lines'. Takie postępowanie byłoby złą praktyką. Zakładasz, że wiesz z góry, dlaczego dane są złe (miały dodatkową wartość dodaną do niego). Ale co, jeśli ma zbyt mało kolumn? Co się stanie, jeśli dodatkowa wartość zostanie wstawiona zamiast dołączona? Robienie czegoś takiego jest magnesem z błędami. –

Powiązane problemy