54

データフレームにいくつかの数字といくつかの非数字を持つ列があるとします

>> df['foo']
0       0.0
1     103.8
2     751.1
3       0.0
4       0.0
5         -
6         -
7       0.0
8         -
9       0.0
Name: foo, Length: 9, dtype: object

np.floatこの列を に変換し、フロートでない他のすべてを に変換するにはどうすればよいNaNですか?

私がしようとすると:

>> df['foo'].astype(np.float)

また

>> df['foo'].apply(np.float)

私は得るValueError: could not convert string to float: -

4

4 に答える 4

71

パンダ0.17.0 convert_objectsでは警告が発生します:

今後の警告: convert_objects は非推奨です。データ型固有のコンバーター pd.to_datetime、pd.to_timedelta、および pd.to_numeric を使用します。

メソッドを使用pd.to_numericして、 arg を使用してデータフレームに適用できますcoerce

df1 = df.apply(pd.to_numeric, args=('coerce',))

または多分より適切に:

df1 = df.apply(pd.to_numeric, errors='coerce')

編集

上記の方法は、 pandas バージョン >=0.17.0でのみ有効です。 docs what's new in pandas 0.17.0 から:

pd.to_numeric は、文字列を数値に強制変換する新しい関数です (おそらく強制付き) (GH11133)

于 2015-11-19T05:25:35.140 に答える
34

convert_objectsSeries メソッド (およびconvert_numeric)を使用します。

In [11]: s
Out[11]: 
0    103.8
1    751.1
2      0.0
3      0.0
4        -
5        -
6      0.0
7        -
8      0.0
dtype: object

In [12]: s.convert_objects(convert_numeric=True)
Out[12]: 
0    103.8
1    751.1
2      0.0
3      0.0
4      NaN
5      NaN
6      0.0
7      NaN
8      0.0
dtype: float64

注: これは DataFrame メソッドとしても利用できます。

于 2013-08-25T22:33:14.673 に答える
10

最初にすべての文字列値を に置き換えて、Noneそれらを欠損値としてマークしてから、浮動小数点数に変換します。

df['foo'][df['foo'] == '-'] = None
df['foo'] = df['foo'].astype(float)
于 2013-08-25T22:08:31.083 に答える