Pythonでデータ型:objectをfloat64に変換するにはどうすればいいですか? 質問する

Pythonでデータ型:objectをfloat64に変換するにはどうすればいいですか? 質問する

私は堂々巡りをしていて、さまざまな方法を試しましたが、私の根本的な理解が間違っているようです。エンコード/デコードの問題を理解する上で助けていただければ幸いです。

SQL からデータフレームをインポートすると、一部のデータ型:float64 がオブジェクトに変換されるようです。そのため、計算を行うことができません。オブジェクトを float64 に戻すことができません。

df.head()

Date        WD  Manpower 2nd     CTR    2ndU    T1    T2      T3      T4 

2013/4/6    6   NaN     2,645   5.27%   0.29    407     533     454     368
2013/4/7    7   NaN     2,118   5.89%   0.31    257     659     583     369
2013/4/13   6   NaN     2,470   5.38%   0.29    354     531     473   383
2013/4/14   7   NaN     2,033   6.77%   0.37    396     748     681     458
2013/4/20   6   NaN     2,690   5.38%   0.29    361     528     541     381

df.dtypes

WD             float64
Manpower       float64
2nd             object
CTR             object
2ndU           float64
T1              object
T2              object
T3              object
T4              object
T5              object

dtype: object

SQL テーブル:

ここに画像の説明を入力してください

ベストアンサー1

ほとんどの列は、次のように呼び出すだけで変換できます。convert_objects:

In [36]:

df = df.convert_objects(convert_numeric=True)
df.dtypes
Out[36]:
Date         object
WD            int64
Manpower    float64
2nd          object
CTR          object
2ndU        float64
T1            int64
T2          int64
T3           int64
T4        float64
dtype: object

列「2番目」と「CTR」については、ベクトル化されたstr3桁ごとの区切り記号を置き換えて「%」記号を削除し、astype変換する:

In [39]:

df['2nd'] = df['2nd'].str.replace(',','').astype(int)
df['CTR'] = df['CTR'].str.replace('%','').astype(np.float64)
df.dtypes
Out[39]:
Date         object
WD            int64
Manpower    float64
2nd           int32
CTR         float64
2ndU        float64
T1            int64
T2            int64
T3            int64
T4           object
dtype: object
In [40]:

df.head()
Out[40]:
        Date  WD  Manpower   2nd   CTR  2ndU   T1    T2   T3     T4
0   2013/4/6   6       NaN  2645  5.27  0.29  407   533  454    368
1   2013/4/7   7       NaN  2118  5.89  0.31  257   659  583    369
2  2013/4/13   6       NaN  2470  5.38  0.29  354   531  473    383
3  2013/4/14   7       NaN  2033  6.77  0.37  396   748  681    458
4  2013/4/20   6       NaN  2690  5.38  0.29  361   528  541    381

または、 を呼び出さずに上記の文字列処理操作を実行しastype、 を呼び出してconvert_objectsすべてを一度に変換することもできます。

アップデート

バージョン0.17.0 convert_objectsは非推奨であり、これを行うためのトップレベルの関数がないため、次の操作を行う必要があります。

df.apply(lambda col:pd.to_numeric(col, errors='coerce'))

を参照してくださいドキュメントそしてこの関連する質問:pandas: 複数列の to_numeric

おすすめ記事