将 uuid 添加到 pandas DataFrame 中的新列

新手上路,请多包涵

我正在为 pandas DataFrame 中单个新列中的每一行添加一个 uuid。这显然用相同的 uuid 填充了列:

 import uuid
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3), columns=list('abc'),
                  index=['apple', 'banana', 'cherry', 'date'])
df['uuid'] = uuid.uuid4()
print(df)

               a         b         c                                  uuid
apple   0.687601 -1.332904 -0.166018  34115445-c4b8-4e64-bc96-e120abda1653
banana -2.252191 -0.844470  0.384140  34115445-c4b8-4e64-bc96-e120abda1653
cherry -0.470388  0.642342  0.692454  34115445-c4b8-4e64-bc96-e120abda1653
date   -0.943255  1.450051 -0.296499  34115445-c4b8-4e64-bc96-e120abda1653

我正在寻找的是“uuid”列的每一行中的新 uuid。我也尝试过使用 .apply() 和 .map() 但没有成功。

原文由 TankofVines 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

这是一种方式:

 df['uuid'] = [uuid.uuid4() for _ in range(len(df.index))]

原文由 jpp 发布,翻译遵循 CC BY-SA 3.0 许可协议

我不能在这里谈论计算效率,但我更喜欢这里的语法,因为它与我通常用来生成新列的其他 apply-lambda 修改一致:

 df['uuid'] = df.apply(lambda _: uuid.uuid4(), axis=1)

您还可以选择一个随机列来删除轴要求(为什么 axis=0 是默认值,我永远不会理解):

 df['uuid'] = df['col'].apply(lambda _: uuid.uuid4())

从技术上讲,这些的缺点是你传递了一个你实际上没有使用的变量( _ )。能够执行类似 lambda: uuid.uuid4() 的功能会稍微好一点,但是 apply 不支持没有参数的 lambas,考虑到它的用例相当有限,这是合理的。

原文由 Brendan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题