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

如何将Pandas DataFrame中Job_Code列空值替换为唯一递增值?

问题分析与解决方案

你的代码问题点评

  • enumerate(df.Job_Code)返回的是**(索引, 列值)**的元组,你判断pd.isnull(e)是在检查元组是否为NaN,这永远不成立,所以替换逻辑根本不会触发。
  • 就算拿到了列值,e == "tempkey" + str(c)只是做相等性比较,没有把新值赋值回DataFrame,原数据不会有任何变化。
  • c+1没有重新赋值给c,就算进入循环,计数器也不会递增,永远只会生成tempkey1。
  • 手动循环遍历DataFrame列是低效操作,违背了Pandas基于向量化运算的设计思想,这就是为什么大家会提醒“不要用iterrows!”。

高效解决方案

直接用Pandas的向量化操作定位缺失值,批量生成并替换唯一键:

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({'Client':['Microsoft', 'Google', 'Apple', 'StackOverflow', 'PostGres'],
                   'Job_Code': ['J001', 'J002', np.NaN, 'J003', np.NaN]})

# 1. 获取Job_Code列的缺失值掩码
mask = df['Job_Code'].isna()
# 2. 计算缺失值数量,生成对应的唯一临时键
num_missing = mask.sum()
temp_keys = [f'tempkey{i+1}' for i in range(num_missing)]
# 3. 给缺失值位置赋值临时键
df.loc[mask, 'Job_Code'] = temp_keys

print(df)

运行后输出的结果完全符合你的期望:

Client  Job_Code
0    Microsoft      J001
1       Google      J002
2         Apple  tempkey1
3  StackOverflow      J003
4      PostGres  tempkey2

补充说明

  • 这种向量化操作比循环快得多,哪怕数据量远大于265行也能高效处理。
  • 如果需要确保临时键和现有Job_Code完全不重复(避免极端情况),可以加一层校验:
existing_keys = set(df['Job_Code'].dropna())
temp_keys = []
c = 1
while len(temp_keys) < num_missing:
    key = f'tempkey{c}'
    if key not in existing_keys:
        temp_keys.append(key)
    c += 1
df.loc[mask, 'Job_Code'] = temp_keys

内容的提问来源于stack exchange,提问作者Nick_Jo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:15:35