如何实现DataFrame中值到对应正确列的映射?
Pandas DataFrame错配值/列名修正方法
场景1:仅列名映射错误(对应你给出的示例场景)
如果所有列内存储的值本身是正确的,只是列名标注错误(比如示例中原Cust_Id列实际存储的是手机号,需要改列名为Phn_No),直接用rename方法做列名映射即可,执行效率最高:
# 配置列名映射关系:key为原错误列名,value为对应正确列名 col_rename_map = { "Cust_Id": "Phn_No" # 存在其他错名列时,直接在字典中追加键值对即可 } df_output = df.rename(columns=col_rename_map)
执行后得到的df_output和你期望的结构完全一致:
Name Age Phn_No alex 47 1923894833
场景2:存在值跨列错位问题
如果不只是列名错误,还存在行内值放错列的情况(比如部分行的年龄值跑到了手机号列、手机号值跑到了年龄列),可以基于值的格式规则做逐行归位:
# 先初始化正确列结构的空结果表 df_output = pd.DataFrame(columns=["Name", "Age", "Phn_No"]) for row_idx, row in df.iterrows(): # 遍历当前行所有值,按规则匹配到对应列 for cell_val in row: cell_str = str(cell_val).strip() # 非数字值判定为姓名 if not cell_str.isdigit(): df_output.loc[row_idx, "Name"] = cell_val # 数值在0-120区间的整数判定为年龄 elif cell_str.isdigit() and 0 <= int(cell_str) <= 120: df_output.loc[row_idx, "Age"] = int(cell_val) # 长度7位以上的数字串判定为手机号 elif cell_str.isdigit() and len(cell_str) >=7: df_output.loc[row_idx, "Phn_No"] = cell_val
你可以根据自己实际的字段规则调整判定逻辑,适配自己的数据集。
内容的提问来源于stack exchange,提问作者James Lin
相关产品推荐
相关产品推荐

