将Python字典键设为CSV某列内容时出现KeyError问题求助
问题分析与解决方案
错误原因
你遇到的KeyError是因为初始化的空字典My_dict中不存在abc_123_def.77这个键,却直接调用了.append()方法——字典不存在的键无法直接执行属性/方法调用。另外你的目标是让每个键对应单个递增数字,而非列表,所以.append()本身也是多余的。
修复方案
方案1:修正基础循环逻辑
直接对字典的键赋值即可,无需使用append:
My_dict = {} count = 0 csvfile = pd.read_csv(my_txt) # 变量名改为row更准确,iterrows返回的是行数据 for idx, row in csvfile.iterrows(): My_dict[row['Name']] = count count += 1
如果需要从1开始递增(和你的示例输出一致),只需把count初始值设为1即可。
方案2:更高效的Pandas简洁写法
利用列表推导式结合enumerate,代码更简洁且性能更优(避免显式循环):
csvfile = pd.read_csv(my_txt) # 默认从0开始递增 My_dict = {name: idx for idx, name in enumerate(csvfile['Name'])} # 如果需要从1开始,给enumerate加start参数 My_dict = {name: idx for idx, name in enumerate(csvfile['Name'], start=1)}
方案3:Pandas内置方法转换
借助reset_index生成索引列后直接转字典:
csvfile = pd.read_csv(my_txt) # 从0开始的索引转字典 My_dict = csvfile['Name'].reset_index().set_index('Name')['index'].to_dict() # 从1开始的话,可以先给索引+1 My_dict = csvfile['Name'].reset_index().assign(index=lambda x: x['index']+1).set_index('Name')['index'].to_dict()
内容的提问来源于stack exchange,提问作者peony
相关产品推荐
相关产品推荐

