DataFrame切片副本赋值警告及KeyError问题求助
问题分析与解决方案
关于SettingWithCopyWarning警告
你最初的代码出现警告,是因为pandas不推荐通过home_data['Street'][index]这种链式索引的方式修改DataFrame数据——这种写法可能会意外修改到数据的副本而非原数据,所以触发警告。
关于KeyError: 'Pave'
虽然你确认'Pave'同时存在于字典和home_data['Street']中,但大概率是字符串不一致导致的:比如字典里的键是带空格的' Pave',而DataFrame里是'Pave';或者大小写不同(比如'pave' vs 'Pave')。可以用set(home_data['Street']) - set(dictionnaire.keys())快速找出不匹配的元素。
正确的实现方式
完全不需要手动循环,用pandas的map方法就能高效完成映射,还能避免所有问题:
# 构建映射字典(用字典推导式更简洁) dictionnaire = {valeur: i+1 for i, valeur in enumerate(streets)} # 直接映射替换列值 home_data['Street'] = home_data['Street'].map(dictionnaire)
如果担心有不匹配的元素导致KeyError,可以用fillna处理,或者改用replace方法(不匹配的元素会保持原值):
home_data['Street'] = home_data['Street'].replace(dictionnaire)
如果一定要用循环修改,必须用loc来确保操作的是原数据:
dictionnaire = {valeur: i+1 for i, valeur in enumerate(streets)} for index, elem in home_data['Street'].items(): home_data.loc[index, 'Street'] = dictionnaire[elem]
内容的提问来源于stack exchange,提问作者Entretoize
相关产品推荐
相关产品推荐

