2016-04-26 12 views
3

ich bereits über verschiedene Lösungen gelesen haben zu floaten, und versuchte, die Lösung hier angegeben: Pandas: Converting to numeric, creating NaNs when necessaryKonvertieren eine Spalte in Pandas Datenrahmen von String

Aber es mein Problem nicht wirklich lösen: Ich habe einen Datenrahmen enthält mehrere Spalten, in denen eine Spalte ['PricePerSeat_Outdoor'] enthält einige float-Werte, einige leere Werte und einige '-'

print type(df_raw['PricePerSeat_Outdoor'][99]) 
    print df_raw['PricePerSeat_Outdoor'][95:101] 
    df_raw['PricePerSeat_Outdoor'] = df_raw['PricePerSeat_Outdoor'].apply(pd.to_numeric, errors='coerce') 
    print type(df_raw['PricePerSeat_Outdoor'][99]) 

Dann bekam ich:

<type 'str'> 
95  17.21 
96  17.24 
97   - 
98   - 
99  17.2 
100 17.24 
Name: PricePerSeat_Outdoor, dtype: object 
<type 'str'> 

Die Werte in Zeile 98 und 99 wurden nicht konvertiert. Auch hier habe ich bereits mehrere Methoden ausprobiert, einschließlich der folgenden, aber es hat einfach nicht funktioniert. Sehr geschätzt, wenn mir jemand Hinweise geben kann.

df_raw['PricePerSeat_Outdoor'] = df_raw['PricePerSeat_Outdoor'].apply(pd.to_numeric, errors='coerce')

Auch, wie kann ich gleichzeitig mehrere Spalten numerisch konvertieren? Vielen Dank.

Antwort

9

versuchen Sie dies:

df_raw['PricePerSeat_Outdoor'] = pd.to_numeric(df_raw['PricePerSeat_Outdoor'], errors='coerce') 

Hier ist ein Beispiel:

In [97]: a = pd.Series(['17.21','17.34','15.23','-','-','','12.34'] 

In [98]: b = pd.Series(['0.21','0.34','0.23','-','','-','0.34']) 

In [99]: df = pd.DataFrame({'a':a, 'b':b}) 

In [100]: df['c'] = np.random.choice(['a','b','b'], len(df)) 

In [101]: df 
Out[101]: 
     a  b c 
0 17.21 0.21 a 
1 17.34 0.34 b 
2 15.23 0.23 b 
3  -  - b 
4  -  b 
5   - b 
6 12.34 0.34 b 

In [102]: cols_to_convert = ['a','b'] 

In [103]: cols_to_convert 
Out[103]: ['a', 'b'] 

In [104]: for col in cols_to_convert: 
    .....:   df[col] = pd.to_numeric(df[col], errors='coerce') 
    .....: 

In [105]: df 
Out[105]: 
     a  b c 
0 17.21 0.21 a 
1 17.34 0.34 b 
2 15.23 0.23 b 
3 NaN NaN b 
4 NaN NaN b 
5 NaN NaN b 
6 12.34 0.34 b 

Kontrolle:

In [106]: df.dtypes 
Out[106]: 
a float64 
b float64 
c  object 
dtype: object 
+0

Ja, das ist, was ich früher schließlich ... danke !! – Kevin

+0

Wissen Sie jedoch, wie ich dasselbe mit mehreren Spalten anwenden kann? – Kevin

+0

@Kevin, ich habe ein Beispiel hinzugefügt - bitte überprüfen – MaxU