有可能识别出唯一的值吗​在字典里的关键字里



我有

df.shape
> (12702, 27)
df['x'][0]
>{'a': '123',
'b': '214', 
'c': '654',}

我尝试:

df['x'].unique()
>TypeError: unhashable type: 'list'

有可能识别出唯一的值吗​​在字典里的关键字里?

我应该用假人吗?

(提供类似于https://stackoverflow.com/a/12897477/15744261)

编辑:

很抱歉多次编辑,我误解了你的问题。

从您的代码片段来看,df[x]似乎正在返回字典列表。如果您的要求是获得某些字典中的所有唯一值,则可以使用list(my_dict)添加键(它将返回键的列表(。然后使用列表中的一个集合来返回唯一的值。示例:

values = set(list(df['x'][0]) + list(df['x'][1]) + ... )

如果你需要所有这些字典中的唯一键,你可以在列表理解方面更有创意地编译所有键,然后将其封装在一组唯一值中。

旧答案:

对于列表,您可以简单地转换为一个集,该集将删除重复项:

values = set(df['x'][0])

如果你想将这些值用作列表,你也可以将该集转换为列表:

list_values = list(values)

或者在一行中:

values = list(set(df['x'][0]))

请记住,这肯定不是最有效的方法。我相信,如果你要处理大量数据,有更好的方法可以做到这一点。

您似乎想在这一列中的所有字典中找到唯一的键。使用CCD_ 3可以很容易地做到这一点。我生成了一些样本数据:

import pandas as pd
import random
possible_keys = 'abcdefg'
df = pd.DataFrame({'x': [{key: 1 for key in random.choices(possible_keys, k=3)} for _ in range(10)]})

此数据帧如下所示:

x
0          {'c': 1, 'a': 1}
1  {'b': 1, 'd': 1, 'c': 1}
2          {'d': 1, 'b': 1}
3  {'b': 1, 'f': 1, 'e': 1}
4  {'a': 1, 'd': 1, 'c': 1}
5          {'g': 1, 'b': 1}
6                  {'d': 1}
7                  {'e': 1}
8  {'c': 1, 'd': 1, 'f': 1}
9  {'b': 1, 'a': 1, 'f': 1}

现在真正的答案是:

from functools import reduce
reduce(set.union, df['x'], set())

结果:

{'a', 'b', 'c', 'd', 'e', 'f', 'g'}

最新更新