我希望在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(),但没有成功。
5条答案
按热度按时间6qftjkof1#
这是一个办法:
wqsoz72f2#
我不能在这里谈论计算效率,但我更喜欢这里的语法,因为它与我通常用来生成新列的其他apply-lambda修改一致:
您还可以随机选择一列来删除轴要求(为什么
axis=0
是默认值,我永远也不明白):从技术上讲,这些方法的缺点是你传入了一个你实际上并不使用的变量(
_
)。如果能够做像lambda: uuid.uuid4()
这样的事情,那就好了,但是apply
不支持没有参数的lambda,考虑到它的用例相当有限,这是合理的。yvgpqqbh3#
wlp8pajw4#
要创建一个新列,必须有足够的值来填充该列。如果我们知道行数(通过计算 Dataframe 的长度),我们就可以创建一组值,然后将其应用到列中。
b09cbbtk5#
S.A.考尔德的答案的修订版本使用Pandasv1.5.2:
不需要将索引转换为Series。将
lambda x:
替换为lambda _:
向程序员表明,map方法提供的Series元素在计算UUID时未使用。