Python 数据帧列:用数字替换字符串值时出错

Python 数据帧列:用数字替换字符串值时出错,python,pandas,Python,Pandas,我有一个dataframe列,它有整数和'NA'值。下面是列的唯一值 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

我有一个dataframe列,它有整数和
'NA'
值。下面是列的唯一值

 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'

这个问题的原因是什么?还有其他方法吗?

原因是
NAReplace
被定义为字典,语法
NAReplace[item]
要求
item
NAReplace
的一个键,否则会看到
keyrerror

在任何情况下,列表理解在这里都不合适。只需使用
fillna

testData['LotFrontage'] = testData['LotFrontage'].replace('NA', 0)
很可能您需要数字数据,在这种情况下,我建议您转换为数字:

testData['LotFrontage'] = pd.to_numeric(testData['LotFrontage'], errors='coerce').fillna(0)

参数
errors='compresse'
强制不可转换的值给出
NaN

,因为在列表理解中,您从字典中获取所有值的值

八十 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)

好吧,两个都在同一时间在pd上。到数值。