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:无法将 float NaN 转换为整数
以及:
AttributeError:只能将.str 访问器与字符串值一起使用,该字符串值在熊猫中使用 np.object_dtype
我该如何解决这个问题?
77
如果列中的某些值丢失(NaN
)然后转换为数字,则dtype
始终为float
。您不能将值转换为int
。只能转换为float
,因为NaN
的type
为float
。
print (type(np.nan))
<class 'float'>
请参阅docs如何转换值,如果至少有一个NaN
:
整数 & gt;转换为 float64
如果需要 int 值,您需要将NaN
替换为一些int
,例如0
由fillna
,然后它完美地工作:
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
18
从pandas & gt;= 0.24现在有一个内置 pandas 整数。
这确实允许整数 nan,因此您不需要填充 na。
请注意代码中'Int64'
中的大写。
这是 pandas 整数,而不是 numpy 整数。
您需要使用:.astype('Int64')
所以,这样做:
df['A'] = df['A'].str.extract('(\d+)', expand=False).astype('float').astype('Int64')
df['B'] = df['B'].str.extract('(\d+)', expand=False).astype('float').astype('Int64')
更多关于熊猫整数 na 值的信息:
https://pandas.pydata.org/pandas-docs/stable/user_guide/gotchas.html#nan-integer-na-values-and-na-type-promotions
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(43条)