web-dev-qa-db-ja.com

pandasデータフレームの列を文字列からフロートに変換する

私はすでにさまざまな解決策について読み、ここで述べられている解決策を試しました: パンダ:数値に変換し、必要に応じてNaNを作成します

しかし、それは本当に私の問題を解決しませんでした:私はデータフレームに複数の列が含まれていて、列_['PricePerSeat_Outdoor']_にはいくつかの浮動小数点値、いくつかの空の値、およびいくつかの_'-'_が含まれています

_    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]) 
_

それから私は得ました:

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

行#98および99の値は変換されませんでした。繰り返しますが、私は以下を含む複数の方法をすでに試しましたが、うまくいきませんでした。誰かが私にいくつかのヒントを与えることができれば、とても感謝しています。

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

また、複数の列を一度に数値に変換するにはどうすればよいですか?ありがとう。

6
Kevin

これを試して:

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

次に例を示します。

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

小切手:

In [106]: df.dtypes
Out[106]:
a    float64
b    float64
c     object
dtype: object
14
MaxU