2015-11-13 10 views
7

Ho file CSV, che ho letto in in panda con:Leggi tutto ma nell'ultima riga del file CSV in panda

#!/usr/bin/env python 

import pandas as pd 
import sys 

filename = sys.argv[1] 
df = pd.read_csv(filename) 

Purtroppo, l'ultima riga di questi file è spesso corrotta (ha il numero sbagliato di virgole). Attualmente apro ciascun file in un editor di testo e rimuovo l'ultima riga.

E 'possibile rimuovere l'ultima riga nello stesso script python/panda che carica il CSV per evitare di dover fare questo passo in più non automatizzato?

+0

Hai eliminato una domanda sull'estrazione di numeri, comunque stavo per suggerire di usare 'str.extract':' per col in df.columns [2:]: df [col] = df [col] .str.extract (r '(\ d +)'). astype (int) ' – EdChum

+0

@EdChum Grazie! – eleanora

+0

@EdChum Il codice lascia i punti decimali? – eleanora

risposta

7

passaggio error_bad_lines=False e salterà questa riga automaticamente

df = pd.read_csv(filename, error_bad_lines=False) 

Il vantaggio di error_bad_lines è esso salterà e non bork su tutte le linee errate ma se l'ultima riga è sempre duff allora skipfooter=1 è meglio

Grazie a @DexterMorgan per sottolineare che skipfooter opzione forza il motore di utilizzare il motore pitone che è più lento rispetto al motore c per l'analisi di un csv.

+0

Avrei dovuto vederlo. Grazie! – eleanora

+1

Per quanto riguarda l'opzione 'skipfooter', potrebbe essere utile sapere che non funziona con l'opzione' dtypes': 'ValueError: caduta di nuovo al motore 'python' perché il motore di 'c' non supporta skipfooter, ma questo fa sì che 'dtype' sia ignorato in quanto non è supportato dal motore 'python'. (Si noti l'opzione '' convertitori fornisce funzionalità simili.) ' –

+0

@DexterMorgan sicuro aggiungerà – EdChum

Problemi correlati