df
A B
0 a=10 b=20.10
1 a=20 NaN
2 NaN b=30.10
3 a=40 b=40.10
我试过 :
df['A'] = df['A'].str.extract('(\d+)').astype(int)
df['B'] = df['B'].str.extract('(\d+)').astype(float)
但我收到以下错误:
ValueError:无法将浮点 NaN 转换为整数
And:
AttributeError:只能将 .str 访问器与字符串值一起使用,该访问器在 pandas 中使用 np.object_ dtype
我该如何解决 ?
如果列中缺少某些值(NaN
) 然后转换为数字,总是dtype
is float
。您无法将值转换为int
。只为float
, 因为type
of NaN
is float
.
print (type(np.nan))
<class 'float'>
See docs http://pandas.pydata.org/pandas-docs/stable/gotchas.html#na-type-promotions如果至少有一个值,如何转换值NaN
:
整数 > 转换为 float64
如果需要 int 值,则需要替换NaN
对某些人int
, e.g. 0
by fillna http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html然后它就完美地工作了:
df['A'] = df['A'].str.extract('(\d+)', expand=False)
df['B'] = df['B'].str.extract('(\d+)', expand=False)
print (df)
A B
0 10 20
1 20 NaN
2 NaN 30
3 40 40
df1 = df.fillna(0).astype(int)
print (df1)
A B
0 10 20
1 20 0
2 0 30
3 40 40
print (df1.dtypes)
A int32
B int32
dtype: object
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)