将两个数据框列压缩成字典,以获取TypeError:“ dict”对象不可调用

时间:2019-03-21 21:44:20

标签: python pandas dictionary

假设我有一个看起来像这样的数据框:

    order               responses
1   [63, 61, 64, 62]    [3, 4, 4, 3]
2   [64, 61, 62, 63]    [1, 2, 3, 4]
3   [62, 64, 61, 63]    [3, 4, 4, 3]
4   [61, 63, 64, 62]    [4, 1, 4, 4]
5   [61, 63, 64, 62]    [4, 4, 2, 1]
6   [63, 64, 62, 61]    [4, 4, 4, 4]
7   [64, 61, 62, 63]    [3, 3, 3, 3]
8   [64, 62, 63, 61]    [4, 2, 4, 3]
9   [61, 62, 64, 63]    [3, 2, 4, 4]
10  [63, 62, 61, 64]    [4, 98, 3, 4]
11  [63, 62, 61, 64]    [4, 4, 4, 4]
12  [64, 62, 61, 63]    [4, 3, 4, 3]

我的目标是创建一个容纳{order: responses}

的字典

我尝试通过以下几行做到这一点:

df['combo'] = df[['order', 'responses']].apply(lambda x: zip(x[0], x[1]), axis=1)

哪个返回给我combo列中的zip对象列表。

现在,当我尝试以下性质的东西时:

df['combo'] = df[['order', 'responses']].apply(lambda x: dict(zip(x[0], x[1])), axis=1)

它会导致以下回溯:

TypeError: ("'dict' object is not callable", 'occurred at index 1')

当我尝试以下操作时:

x = dict(zip(df.order,df.responses))

结果:

TypeError: 'dict' object is not callable

因此,很明显,我没有正确调用字典对象。

我的目标:我需要返回某种数据结构,其中包含所有这些字典。

我通常不会在这里发布信息,如果有什么不符合准则的情况,我们深表歉意。感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

dict将不接受key作为list的类型,因此我们将其转换为tuple

d=dict(zip(df.order.apply(tuple),df.responses))
d
Out[155]: {(63, 61, 64, 62): [3, 4, 4, 3], (64, 61, 62, 63): [1, 2, 3, 4]}

作为保鲜盒

[dict(zip(x,y))for x , y in zip (df.order,df.responses)]
Out[158]: [{61: 4, 62: 3, 63: 3, 64: 4}, {61: 2, 62: 3, 63: 4, 64: 1}]

答案 1 :(得分:0)

问题在这里:

.apply(lambda x: dict(zip(x[0], x[1])), axis=1)

apply是将lambda的给定功能应用于.apply之前的序列中每个元素的命令。但是,您将lambda定义为dict而不是函数。