DataFrameで文字列を浮動小数点数に変換する


112

文字列とNaN値を含むDataFrame列を浮動小数点に変換する方法。そして、値が文字列と浮動小数点数である別の列があります。この列全体を浮動小数点数に変換する方法。


7
使用しないでくださいconvert_objects。非推奨です。使用to_numericまたはastype代わりに
Ted Petrou 2017年

回答:


72

注: pd.convert_objectsは非推奨になりました。pd.Series.astype(float)またはpd.to_numeric他の回答で説明されているように使用する必要があります。

これは0.11で利用可能です。強制変換(またはnanに設定)これastypeは失敗する場合でも機能します。また、シリーズごとなので、完全な文字列列とは変換されません。

In [10]: df = DataFrame(dict(A = Series(['1.0','1']), B = Series(['1.0','foo'])))

In [11]: df
Out[11]: 
     A    B
0  1.0  1.0
1    1  foo

In [12]: df.dtypes
Out[12]: 
A    object
B    object
dtype: object

In [13]: df.convert_objects(convert_numeric=True)
Out[13]: 
   A   B
0  1   1
1  1 NaN

In [14]: df.convert_objects(convert_numeric=True).dtypes
Out[14]: 
A    float64
B    float64
dtype: object

これは列(リードマルチインデックス)では機能せず、データフレーム内の値でのみ機能することに注意してください
denfromufa

1
文字列を浮動小数点数に変換するには、set_levelsを使用する必要がありました
denfromufa '29

16
df['ColumnName'] = df['ColumnName'].convert_objects(convert_numeric=True)単一の列のみを変換できます。
Jack

19
これは新しいバージョンではpd.to_numeric(col)になりました
Jeff

11
新しいパンダでは、convert_objectsは廃止されました。データ型固有のコンバーターpd.to_numericを使用します。
Thomas Matthew

57

試すことができdf.column_name = df.column_name.astype(float)ます。NaN値、あなたは彼らが変換する方法を指定する必要がありますが、使用することができ.fillna、それを行うには方法を。

例:

In [12]: df
Out[12]: 
     a    b
0  0.1  0.2
1  NaN  0.3
2  0.4  0.5

In [13]: df.a.values
Out[13]: array(['0.1', nan, '0.4'], dtype=object)

In [14]: df.a = df.a.astype(float).fillna(0.0)

In [15]: df
Out[15]: 
     a    b
0  0.1  0.2
1  0.0  0.3
2  0.4  0.5

In [16]: df.a.values
Out[16]: array([ 0.1,  0. ,  0.4])

47

新しいバージョンのパンダ(0.17以上)では、to_numeric関数を使用できます。データフレーム全体または個別の列のみを変換できます。また、数値に変換できないものの処理方法を選択することもできます。

import pandas as pd
s = pd.Series(['1.0', '2', -3])
pd.to_numeric(s)
s = pd.Series(['apple', '1.0', '2', -3])
pd.to_numeric(s, errors='ignore')
pd.to_numeric(s, errors='coerce')

32
に適用するpd.to_numericにはDataFrameこの回答で詳細に説明されてdf.apply(pd.to_numeric)いるように使用できます。
Ninjakannon 2017年

31
df['MyColumnName'] = df['MyColumnName'].astype('float64') 

6
フロートに文字列から変換するときに、これは動作しません:ValueError: could not convert string to float: 'date'
ジャック

@ジャックあなたはここでの回避策を知っていますか?文字列を浮動小数点に変換するこの正確な問題に遭遇しています。
Hatt

@ハット私は同じ問題に直面しています。その解決策を見つけましたか?
Prakhar Jhudele

@ジャックよくわかりませんが、日付の形式と浮動小数点数を混同しているようです。#日時に変換df ['date'] = pd.to_datetime(df ['date'])
Claude COULOMBE

8

floatに変換する前に、空の文字列( '')をnp.nanに置き換える必要があります。つまり:

df['a']=df.a.replace('',np.nan).astype(float)

1

ここに例があります

                            GHI             Temp  Power Day_Type
2016-03-15 06:00:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:01:00 -7.99999952505459e-7    18.2    0   NaN
2016-03-15 06:02:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:03:00 -7.99999952505459e-7    18.3    0   NaN
2016-03-15 06:04:00 -7.99999952505459e-7    18.3    0   NaN

しかし、これがすべての文字列値の場合...私の場合のように...目的の列を浮動小数点数に変換します。

df_inv_29['GHI'] = df_inv_29.GHI.astype(float)
df_inv_29['Temp'] = df_inv_29.Temp.astype(float)
df_inv_29['Power'] = df_inv_29.Power.astype(float)

データフレームに浮動小数点値が含まれるようになります:-)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.