2015-10-30 30 views
11

Voglio leggere in un csv molto grande (non può essere aperto in Excel e modificato facilmente) ma da qualche parte intorno alla 100.000 ° riga, c'è una riga con una colonna in più che causa il crash del programma. Questa riga è errata quindi ho bisogno di un modo per ignorare il fatto che si trattava di una colonna in più. Ci sono circa 50 colonne in modo da non codificare le intestazioni e usare nomi o usecol non è preferibile. Potrei anche incontrare questo problema in altri csv e voglio una soluzione generica. Sfortunatamente non ho trovato nulla in read_csv. Il codice è semplice come questo:Pandas dataframe read_csv su dati errati

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

Si desidera "error_bad_lines = False" per saltare dati errati – EdChum

risposta

28

passaggio error_bad_lines=False saltare righe erronee:

error_bad_lines: booleano, predefinito vere linee con troppi campi (ad esempio una linea csv con troppe virgole) per impostazione predefinita causerà un'eccezione e non verrà restituito DataFrame. Se False, , queste "righe errate" verranno eliminate dal DataFrame restituito . (Valido solo con parser C)

+0

Ho dimenticato di menzionarlo. Funzionerà per quello che voglio fare attualmente, ma lungo la strada voglio la fila senza il valore aggiuntivo incidentale. – Fonti

+0

Un'alternativa è leggere una singola riga per ottenere il numero corretto di colonne e quindi rileggere di nuovo per leggere solo quelle colonne, ad es. 'cols = pd.read_csv (file, nrows = 1) .columns df = pd.read_csv (file, usecols = cols)' questo allora ignorerà la colonna aggiuntiva che penso per quella riga di errore provalo e fammi sapere se funziona per te – EdChum

+1

@Fonti: non esiste alcuna opzione per 'truncate_bad_lines'. Fare così sarebbe una cattiva pratica. Supponi di sapere in anticipo perché i dati non sono corretti (aveva un valore aggiunto aggiunto). Ma cosa succede se ha troppe poche colonne? Cosa succede se il valore extra è stato inserito anziché aggiunto? Fare qualcosa di simile è una calamita per insetti. –