df 内の複数の列を文字列から整数および浮動小数点数に変換しようとしています。 fillna メソッドを使用して NaN 値を削除しましたが、それでもエラーが発生します。私がやったことは次のとおりです。
df = [['column1', 'column2', 'column3', 'column4']]
df = df[['column1', 'column2', 'column3', 'column4']].fillna(0)
convert_dict = {'column1': int,
'column2': float,
'column3': int,
'column4': float}
df = df.astype(convert_dict)
エラーには「ValueError: float NaN を integer に変換できません」と表示されます。
編集: inplace=True を削除
1
int に変換したい列には np.nan があります
– ベニー
2020 年 9 月 3 日 17:19
1
df = [[...]].fillna(0, inplace=True) は意味がありません。そこに df が欠落していると仮定します。結果を df に割り当てる場合は、inplace は必要ありません。
– Aチャンピオン
2020 年 9 月 3 日 17:20
@BEN_YO はい。 np.nan は fillna と連携しますか?
– ssmm
2020 年 9 月 3 日 17:20
1
df = [['column1'... の代わりに df = df[['column1'...] を使用する必要がありますか?
– リッチーV
2020 年 9 月 3 日 17:32
1
df = df.astype(convert_dict,errors = 'ignore') は機能するはずです。
– r0ot293
2020 年 9 月 3 日 17:44
------------------------
Int64 を使用することもできます。ich は欠落している整数値をサポートしています:
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [1, 2, None, 4],
'B': [1.0, 2.0, 3.0, None]})
convert_dict = {'A': 'Int64', 'B': float}
convert_dict
for field, new_type in convert_dict.items():
df[field] = df[field].astype(new_type)
print(df)
print(df.dtypes)
A B
0 1 1.0
1 2 2.0
2 <NA> 3.0
3 4 NaN
A Int64
B float64
dtype: object