如何用不同新UUID填充Pandas列中的缺失值?
解决方案
你的问题出在fillna(str(uuid.uuid4()))的执行逻辑上——这行代码会先调用一次uuid.uuid4()生成一个固定UUID字符串,再把所有缺失值替换成这个固定值,自然所有缺失项都一样。要实现每个缺失值生成新UUID,得让函数在每个缺失位置单独执行,这里有几种实用方法:
方法1:使用apply遍历处理
直接对列应用lambda函数,判断每个值是否缺失,缺失则生成新UUID:
import pandas as pd import uuid # 示例DataFrame df = pd.DataFrame({"B": [uuid.uuid4(), None, uuid.uuid4(), None]}) # 填充缺失值 df["B"] = df["B"].apply(lambda x: str(uuid.uuid4()) if pd.isna(x) else x)
方法2:使用where保留非缺失值,替换缺失值
利用where方法,对非缺失值保留原值,缺失值通过apply生成新UUID:
df["B"] = df["B"].where(pd.notna(df["B"]), df["B"].apply(lambda _: str(uuid.uuid4())))
方法3:批量生成对应数量的UUID替换
先统计缺失值的数量,生成对应个数的UUID列表,再替换到缺失位置:
null_count = df["B"].isna().sum() # 生成对应数量的UUID字符串列表 uuid_list = [str(uuid.uuid4()) for _ in range(null_count)] # 替换缺失值 df.loc[df["B"].isna(), "B"] = uuid_list
这几种方法都能保证每个缺失值得到唯一的UUID,根据你的习惯选择即可。
内容的提问来源于stack exchange,提问作者mrgou
相关产品推荐
相关产品推荐

