You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:17:02