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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:15:39