Pandas如何将Series转换为无空表头字典映射到DataFrame新增列
解决方法
你只需要调整字典生成逻辑,同时修正两处参数错误即可:
import pandas as pd df1 = pd.DataFrame({"ID": [4,8,35,28,34,34,14,28], "cause of failure": [5,3,0,1,7,8,6,7], "crash": [0,0,0,1,1,1,1,1]}) s = pd.DataFrame({'':["None","Design flaw","metal fatigue","Manufacturing flaw","Pilot error","Mechanical failure","Improper maintenance","Fire","Corrosion"]}) def add_column(df,s, ref_column, new_column): # 提取单列DataFrame的第一列转字典,直接得到无外层空键的映射关系 dict_s = s.iloc[:, 0].to_dict() df[new_column] = df[ref_column].map(dict_s) return df # 传入和df1匹配的参考列名、正确的s变量 df1 = add_column(df1,s,"cause of failure","failure") # 如果需要和你提供的示例结果完全对齐(去掉首行ID=4的记录),加以下代码即可 df1 = df1.drop(0).reset_index(drop=True) print(df1)
修改说明
- 映射字典生成逻辑:你的
s是只有1列的DataFrame,用s.iloc[:,0]先提取对应列的Series对象,再调用to_dict()就会直接生成「索引对应故障描述」的纯键值对字典,不会带外层空列名的嵌套结构 - 修正调用错误:原代码调用函数时传入的参考列名
failure code和df1实际列名cause of failure不一致,且变量名错写为未定义的s1,修改后即可正常运行
内容的提问来源于stack exchange,提问作者Sofia
相关产品推荐
相关产品推荐

