gpt4 book ai didi

python - 如何将 python 对象(如字典)分配给 pandas 列

转载 作者:太空宇宙 更新时间:2023-11-03 13:31:06 24 4
gpt4 key购买 nike

我想将 pandas 数据框中的一个单元格设置为一个行字典,其中同一行中的另一列等于 1。我正在使用 df.loc 来过滤行。因为我的字典有两个键,它只有在 df.loc 完成的过滤也有两个键的情况下才有效。如果它没有两个键,我会得到 ValueError: Must have equal len keys and value when setting with an iterable

我不明白为什么这两件事是相关的。

import pandas as pd
df = pd.DataFrame(data=[[1,2], [0,3], [3,4]], columns=['Col1', 'Col2'])
#df = pd.DataFrame(data=[[1,2], [1,3], [3,4]], columns=['Col1', 'Col2'])

df.loc[df["Col1"]==1, "Col2"] = {'key1': 'A',
'key2': 'B'}

print df

如果我取消注释第三行代码,我想产生以下结果。

   Col1                            Col2
0 1 {u'key2': u'B', u'key1': u'A'}
1 1 {u'key2': u'B', u'key1': u'A'}
2 3 4

在这被标记为重复之前,我已经看到了关于这个 pandas 错误的其他问题,但似乎没有一个专门解决这个问题。

最佳答案

IIUC,将字典包裹在一个列表中,并传递给loc:

df

Col1 Col2
0 1 2
1 1 3
2 3 4

m = df['Col1'].eq(1)
df.loc[m, 'Col2'] = [{'a' : 1, 'b' : 2}] * m.sum()

df

Col1 Col2
0 1 {'a': 1, 'b': 2}
1 1 {'a': 1, 'b': 2}
2 3 4

这应该同样适用于任何结果。请记住,[] * n 复制了引用,因此您将相同 dict 对象分配给多个单元格!请记住这一点。

如果您想避免重复引用,还有一个替代方案 - 您可以构建一个具有列表理解的列表。

i = {'a' : 1, 'b' : 2}
df.loc[m, 'Col2'] = [i.copy() for _ in range(m.sum())]

如果你有一个嵌套字典,copy 只执行浅拷贝,所以使用 copy 模块的 deepcopy 函数代替:

from copy import deepcopy
df.loc[m, 'Col2'] = [deepcopy(i) for _ in range(m.sum())]

关于python - 如何将 python 对象(如字典)分配给 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com