2016-06-11 12 views
2

Ich arbeite an einem Datensatz mit mehr als 60 Millionen Zeilen in Pandas. In einer meiner numerischen Spalten vermute ich, dass es ein nicht numerisches Zeichen gibt, das mir die Fehlermeldung "ungültiges Literal für float(): 4010146209+" gibt.Ungültiges Literal für float() in Pandas

Ich kann die Spalte als obj aber nicht als float oder int laden.

Ich habe versucht, r "\ d" und "+" durch "" zu ersetzen.

Ich muss entweder Zeilen mit nicht-numerischen Zeichen in definierten Spalte entfernen oder entfernen Sie alle Zeichen, die Spalte als Float oder Int geladen werden.

Die Spalte enthält NaN, aber diese werden fallen gelassen, bevor ich versuche, als float zu werfen.

+0

Warum würdest du "r" \ d "' ersetzen? Das wird alle Zahlen entfernen. Du solltest "r" \ D "' ersetzen, das entspricht allem außer Zahlen. – Barmar

Antwort

0

Sie .replace() mit einem regular expression verwenden könnte eher die numerischen Werte zu halten, als zu np.nan Umwandlung pd.to_numeric mit:

df['col_name'].replace(to_replace='[^0-9]+', value='',inplace=True,regex=True) 
1

i to_numeric() Funktion für die

Demo verwenden würde

In [583]: a 
Out[583]: 
0       50.5 
1       50.7 
2       50.9 
3      52.70+ 
4       52.9 
5      520.31 
6 really bad number: 520.92 
Name: Price, dtype: object 

In [584]: a = pd.to_numeric(a, errors='coerce') 

In [585]: a 
Out[585]: 
0  50.50 
1  50.70 
2  50.90 
3  NaN 
4  52.90 
5 520.31 
6  NaN 
Name: Price, dtype: float64 
Verwandte Themen