2016-06-11 6 views
2

私はPandasで60M以上の行を持つデータセットを扱っています。私の数値列の1つでは、私は、エラーメッセージ "float()の無効なリテラル:4010146209 +"を返す非数値のcharがあると思われます。Pandasのfloat()の無効なリテラル

カラムをobjとしてロードできますが、floatまたはintとしてロードすることはできません。

私はr "\ d"と "+"を ""で置き換えようとしました。

定義された列に数値以外の文字を含む行を削除するか、列がfloatまたはintとしてロードされないようにするすべてのcharを削除する必要があります。

この列にはNaNが含まれていますが、これらは浮動小数点数としてキャストしようとする前に削除されています。

+0

なぜためto_numeric()機能を使用します'r" \ d "'を置き換えますか?それはすべての数字を削除します。数字以外のすべてにマッチする 'r" \ D "'を置き換えるべきです。 – Barmar

答えて

0

あなたはむしろpd.to_numericを使用してnp.nanに変換するよりも、数値を維持するためにregular expression.replace()を使用することができます。

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

私はその

デモ

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 
関連する問題