为什么这会导致NaN而不是字符串?
df['rnd'] = df.apply(lambda x: str(random.randint(0,9999)).zfill(4))
rnd
---
NaN
NaN
NaN
NaN
NaN
df.dtypes
Rnd object
如果你只想要一个新的随机列(作为零填充字符串),你可以用numpy的randint
(它接受一个size
)和str.zfill
对它进行矢量化,例如:
df = pd.DataFrame(np.random.random((4, 3)))
df['rnd'] = np.random.randint(0, 999, size=len(df))
df['rnd'] = df['rnd'].astype(str).str.zfill(4)
输出:
0 1 2 rnd
0 0.696305 0.624101 0.235630 0056
1 0.437783 0.558600 0.451735 0913
2 0.061021 0.633813 0.008970 0509
3 0.944699 0.713951 0.478524 0088
u need applymap not apply
df['rnd'] = df.applymap(lambda x: str(random.randint(0,9999)).zfill(4))
这是结果
0 0179
1 4545
2 8510
3 3316
Name: rnd, dtype: object
如果你想使用apply方法,那么你需要指定要操作的列:
df["rnd"] = df.rnd.apply(lambda x: str(random.randint(0,9999)).zfill(4))
需要一个axis
。
df['rnd'] = df.apply(lambda x: str(random.randint(0,9999)).zfill(4), axis=1)