使用Pandas根据CSV数值列生成字符串新列时触发KeyError:0错误
解决Pandas中字典映射Type列时出现KeyError: 0的问题
嘿,这个报错我之前也碰到过!本质就是Pandas在你的映射字典里找不到0这个键,但你的DataFrame的Type列里偏偏有0这个值,所以直接抛出了KeyError。咱们一步步来排查解决:
先搞清楚为啥会报错
- 映射字典没覆盖所有Type值:比如你只写了
{1: "NameOne", 2: "NameTwo"},但你的Type列里存在0,字典里没这个键,自然找不到对应值。 - 数据类型不匹配:虽然你说Type是int64,但万一你的字典键是字符串(比如
{"1": "NameOne"}),而Type列是int类型的1,这种类型不匹配也会导致找不到键(虽然这里报错是0,但也得排查这个情况)。
对应的解决方案
1. 补全映射字典的所有可能键
先看看Type列到底有哪些值,然后把所有值都加到字典里:
# 先打印Type列的所有唯一值,看看有没有漏的 print(df['Type'].unique()) # 补全映射字典,比如加上0的对应值 type_mapping = { 0: "NameZero", 1: "NameOne", 2: "NameTwo" # 其他Type值对应的字符串都加上 } # 再执行映射 df['Newtype'] = df['Type'].map(type_mapping)
2. 用更灵活的方式处理未匹配值(推荐)
如果不想一个个补全键,或者不确定Type列有多少种取值,可以用map()配合get()方法,指定一个默认值给那些找不到映射的情况:
type_mapping = {1: "NameOne", 2: "NameTwo"} # 用lambda和get(),找不到的话就返回"UnknownType"(你可以改成自己想要的默认值) df['Newtype'] = df['Type'].map(lambda x: type_mapping.get(x, "UnknownType"))
或者用replace()方法,之后用fillna()填充未匹配的:
df['Newtype'] = df['Type'].replace(type_mapping).fillna("UnknownType")
3. 检查并统一数据类型
如果是类型不匹配的问题(比如字典键是字符串,Type列是int),可以统一类型:
# 把Type列转成字符串(如果字典键是字符串) df['Type'] = df['Type'].astype(str) # 或者把字典的键转成int(如果Type列是int) type_mapping = {int(key): value for key, value in type_mapping.items()} # 再执行映射 df['Newtype'] = df['Type'].map(type_mapping)
提前排查的小技巧
执行映射前,先检查Type列里有没有不在字典键里的值,这样能提前发现问题:
# 找出Type列中不在映射字典里的值 missing_values = df[~df['Type'].isin(type_mapping.keys())]['Type'].unique() if len(missing_values) > 0: print(f"注意:Type列里有这些值没在字典里定义:{missing_values}")
内容的提问来源于stack exchange,提问作者BoroBorooooooooooooooooooooooo
相关产品推荐
相关产品推荐

