我有一个pandas数据框列,其中有浮点值和字符串类型NA值。我需要使用以下代码将这些NA替换为均值。
trainTestJoin["col1"] = trainTestJoin.groupby("col2")["col1"].
transform(lambda x: x.fillna(x.median()))
我得到了
TypeError: could not convert string to float: NA
我试图在填充之前将其转换为
。trainTestJoin["LotFrontage"].astype(float)
但是它也有同样的问题。如何解决这个问题?
答案 0 :(得分:1)
使用pd.to_numeric
转换为数字,它通过errors='coerce'
支持将浮点数NaN
转换为不可转换的值:
df['col1'] = pd.to_numeric(df['col1'], errors='coerce')
然后直接使用groupby
+ transform
:
df['col1'] = df['col1'].fillna(df.groupby('col2')['col1'].transform('mean'))
答案 1 :(得分:0)
或者只是replace
:
trainTestJoin['col1'] = trainTestJoin['col1'].replace('NA',np.nan)
然后简单地:
trainTestJoin['col1'] = trainTestJoin['col1'].fillna(trainTestJoin.groupby('col2')['col1'].transform('mean'))
现在(毕竟):
print(trainTestJoin)
将会得到预期的输出。