将uuid添加到pandas DataFrame中的新列

Tan*_*nes 7 python uuid dataframe python-3.x pandas

我想在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
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是'uuid'专栏每行中的新uuid.我也试过使用.apply()和.map()但没有成功.

jpp*_*jpp 13

这是一种方式:

df['uuid'] = [uuid.uuid4() for _ in range(len(df.index))]
Run Code Online (Sandbox Code Playgroud)

  • @m1nkeh,它应该可以工作。但是使用 Python 循环遍历“范围”比遍历 NumPy 数组更有效。 (2认同)

Bre*_*dan 10

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

df['uuid'] = df.apply(lambda _: uuid.uuid4(), axis=1)
Run Code Online (Sandbox Code Playgroud)

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

df['uuid'] = df['col'].apply(lambda _: uuid.uuid4())
Run Code Online (Sandbox Code Playgroud)

这些的缺点是从技术上讲,您传入了一个_实际上并不使用的变量 ( )。有能力做类似的事情会有点好lambda: uuid.uuid4(),但apply不支持没有参数的lambas,这是合理的,因为它的用例相当有限。