私は堂々巡りをしていて、さまざまな方法を試しましたが、私の根本的な理解が間違っているようです。エンコード/デコードの問題を理解する上で助けていただければ幸いです。
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」については、ベクトル化されたstr
3桁ごとの区切り記号を置き換えて「%」記号を削除し、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