我有pandas dataframe列,它具有整数和'NA'
值。 Followinare是该列的唯一值
print(testData.LotFrontage.unique())
['80' '81' '74' '78' '43' '75' 'NA' '63' '85' '70' '26' '21' '24']
我需要将此字符串NA替换为整数0。我尝试了以下代码
NAReplace = {'NA': 0}
trainingData.LotFrontage = [NAReplace[item] for item in trainingData.LotFrontage ]
我收到一个错误
trainingData.LotFrontage = [NAReplace[item] for item in trainingData.LotFrontage ]
KeyError: '65'
这个问题的原因是什么?还有其他方法吗?
最佳答案
因为在列表推导中,您获得的值是所有值的字典,
80
81
..
字典将尝试查找那些不是'NA'
的键,因此您必须执行get
:
trainingData.LotFrontage = [NAReplace.get(item,item) for item in trainingData.LotFrontage ]
此外,pandasicer将是:
testData['LotFrontage'] = pd.to_numeric(testData['LotFrontage'],errors='coerce').fillna(0)
还有一个来自jpp的答案。
但是要向jpp的第一个添加一些内容:
testData['LotFrontage'].replace('NA', 0,inplace=True)