我有
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'}