python-3.x 将uuid添加到PandasDataFrame中的新列

sh7euo9m  于 2022-12-01  发布在  Python
关注(0)|答案(5)|浏览(198)

我希望在PandasDataFrame的一个新列中为每一行添加一个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(),但没有成功。

6qftjkof

6qftjkof1#

这是一个办法:

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

wqsoz72f2#

我不能在这里谈论计算效率,但我更喜欢这里的语法,因为它与我通常用来生成新列的其他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不支持没有参数的lambda,考虑到它的用例相当有限,这是合理的。

yvgpqqbh

yvgpqqbh3#

from uuid import uuid4
df['uuid'] = df.index.to_series().map(lambda x: uuid4())
wlp8pajw

wlp8pajw4#

要创建一个新列,必须有足够的值来填充该列。如果我们知道行数(通过计算 Dataframe 的长度),我们就可以创建一组值,然后将其应用到列中。

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'])

# you can create a simple list of values using a list comprehension 
#     based on the len (or number of rows) of the dataframe
df['uuid'] = [uuid.uuid4() for x in range(len(df))]
print(df)

apple  -0.775699 -1.104219  1.144653  f98a9c76-99b7-4ba7-9c0a-9121cdf8ad7f
banana -1.540495 -0.945760  0.649370  179819a0-3d0f-43f8-8645-da9229ef3fc3
cherry -0.340872  2.445467 -1.071793  b48a9830-3a10-4ce0-bca0-0cc136f09732
date   -1.286273  0.244233  0.626831  e7b7c65c-0adc-4ba6-88ab-2160e9858fc4
b09cbbtk

b09cbbtk5#

S.A.考尔德的答案的修订版本使用Pandasv1.5.2:

from uuid import uuid4
df['uuid'] = df.index.map(lambda _: uuid4())

不需要将索引转换为Series。将lambda x:替换为lambda _:向程序员表明,map方法提供的Series元素在计算UUID时未使用。

相关问题