mnm*_*mnm 4 python null pandas dtype
我的数据框中有一列包含 nan 值和 int 值。原来的dType是float64,但我试图将其更改为int6,并将nan值更改为np.nan。现在我收到此错误: TypeError: float() argument must be a string or a number, not 'NAType' 当尝试对其进行插补时。在下表中,列类似于“年龄”
data = {'name': ['Alex', 'Ben', 'Marry','Alex', 'Ben', 'Marry'],
'job': ['teacher', 'doctor', 'engineer','teacher', 'doctor', 'engineer'],
'age': [27, 32, 78,27, 32, 78],
'weight': [160, 209, 130,164, 206, 132],
'date': ['6-12-2022', '6-12-2022', '6-12-2022','6-13-2022', '6-13-2022', '6-13-2022']
}
df = pd.DataFrame(data) df
|name |job |age|weight |date
|---|-------|-----------|---|-------|--------
|0 |Alex |teacher |27 |160 |6-12-2022
|1 |Ben |doctor |32 |209 |6-12-2022
|2 |Marry |engineer |78 |130 |6-12-2022
|3 |Alex |teacher |27 |164 |6-13-2022
|4 |Ben |doctor |32 |206 |6-13-2022
|5 |Marry |engineer |78 |132 |6-13-2022
|6 |Alex |teacher |NaN|NaN |6-14-2022
|7 |Ben |doctor |NaN|NaN |6-14-2022
|8 |Marry |engineer |NaN|NaN |6-14-2022
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的:
df['age']=df['age'].astype( dtype={'age': pd.Int8Dtype()})
df.loc[df.age== '<NA>', 'age']=np.nan
Run Code Online (Sandbox Code Playgroud)
有没有办法将 float64 更改为较小的数据类型而不引起此问题?请指教,谢谢
使用
df['age'] = df['age'].astype(dtype='Int64')
Run Code Online (Sandbox Code Playgroud)
使用扩展数据类型Int64(大写I)而不是默认值dtype(int64小写i)。后者运行一段IntCastingNaNError时间,前者工作顺利。
此功能已添加到Pandas 0.24中并在此线程中提到。