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

为什么pandas apply生成4位补零字符串时列值全部为NaN?

问题原因

  • DataFrame.apply默认使用axis=0按列遍历,每次将一整列作为参数传入lambda函数,最终返回的结果长度等于DataFrame的列数,和DataFrame的行数不匹配,赋值时无法按索引对齐,因此全部填充为NaN。
  • 你查看类型时的列名是大写开头的Rnd,赋值时用的是小写rnd,如果存在拼写错误也会导致两者不是同一列,属于可能的次要诱因。

正确实现方案

方案1:调整apply参数(仅小数据量可用,效率较低)

如果要逐行处理,需要显式指定axis=1按行遍历:

df['rnd'] = df.apply(lambda x: str(random.randint(0,9999)).zfill(4), axis=1)

方案2:向量化生成(推荐,大数据量下效率优势明显)

不需要逐行遍历,直接生成和DataFrame行数一致的随机序列处理即可:

# 列表推导式写法
import random
df['rnd'] = [str(random.randint(0,9999)).zfill(4) for _ in range(len(df))]

# numpy向量化写法,效率更高
import numpy as np
df['rnd'] = np.random.randint(0, 10000, size=len(df)).astype(str).str.zfill(4)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:00:01