2013-04-15 10 views
9

Sto usando pandas.read_csv per leggere un file delimitato da spazi bianchi. Il file ha un numero variabile di caratteri bianchi davanti a ogni riga (i numeri sono allineati a destra). Quando leggo questo file, crea una colonna di NaN. Perché questo accade e qual è il modo migliore per prevenirlo?L'utilizzo dei panda per leggere il file di testo con spazi bianchi iniziali dà una colonna NaN

Esempio:

File di testo:

9.0 3.3 4.0 
32.3 44.3 5.1 
    7.2 1.1 0.9 

Comando:

import pandas as pd 
pd.read_csv("test.txt",delim_whitespace=True,header=None) 

uscita:

0  1  2 3 
0 NaN 9.0 3.3 4.0 
1 NaN 32.3 44.3 5.1 
2 NaN 7.2 1.1 0.9 
+0

Sembra che qualcuno abbia [aperto un problema su github] (https://github.com/pydata/pandas/issues/3374) in base a questo post: – Caleb

risposta

13

FWIW tendo a usare \s+ invece, ed è doesn' t suf fer lo stesso problema:

>>> pd.read_csv("wspace.csv", header=None, delim_whitespace=True) 
    0  1  2 3 
0 NaN 9.0 3.3 4.0 
1 NaN 32.3 44.3 5.1 
2 NaN 7.2 1.1 0.9 
>>> pd.read_csv("wspace.csv", header=None, sep=r"\s+") 
     0  1 2 
0 9.0 3.3 4.0 
1 32.3 44.3 5.1 
2 7.2 1.1 0.9 
+0

interessante che questo sarebbe diverso (uso anch'io ''\ s +''), sicuramente un bug? –

+1

Non dovremmo aver bisogno di usare ''\ s +''. [La relativa pagina di tutorial sui panda] (http://pandas.pydata.org/pandas-docs/stable/io.html) dice che "delim_whitespace = True" dovrebbe essere più veloce. Aspetterò altre risposte che potrebbero spiegare questo, ma probabilmente lo etichetterò come la mia soluzione. – Caleb

+0

Questo è un caso piuttosto ambiguo per 'delim_whitespace'. Non è chiaro per me qual è il comportamento giusto-- ''\ s +'' sta funzionando essenzialmente "per sbaglio" come AFAICT. –

Problemi correlati