我有一个数组:
array([nan, 'Stressful day', 'Drank coffee:Drank tea', 'Drank tea',
'Ate late:Drank coffee', 'Drank coffee:Drank tea:Worked out',
'Drank tea:Worked out', 'Drank coffee:Drank tea:Stressful day',
'Drank coffee', 'Drank coffee:Drank tea:Stressful day:Worked out',
'Drank coffee:Worked out', 'Ate late:Drank coffee:Drank tea',
'Ate late:Drank coffee:Drank tea:Worked out',
'Drank tea:Stressful day', 'Drank tea:Stressful day:Worked out',
'Drank coffee:Stressful day:Worked out',
'Drank coffee:Stressful day',
'Ate late:Drank coffee:Drank tea:Stressful day', 'Worked out',
'Ate late:Drank coffee:Worked out'], dtype=object)
这些是来自 Dataframe 的列的唯一值,
正如你所看到的,它们是其他值的组合,如“Drank coffee:Drank tea”是“Drank coffee”和“Drank tea”的组合。我想把这些独特的元素写进这份名单。
创建该列表的最快方法是什么?python库中有没有内置的函数来处理这类事情?
预期输出:
array([nan, 'Stressful day', 'Drank coffee', 'Drank tea', 'Ate late',
'Worked out'], dtype=object)
2条答案
按热度按时间w8biq8rn1#
假设
a
是输入数组,你可以使用str.extractall
:从原始系列
s
:输出:
其他选项(可能效率较低):
保留NaNs:
输出:
或者:
输出:
iecba09b2#
这是一个python加numpy的解决方案。
从列表而不是对象dtype数组开始更简单(数组层不会向此代码添加任何内容)
处理nan是个问题,因为它是一个float,而不是一个string:
float不能“split”,string不能被测试为float值。因此,让我们创建一个实用函数来捕获错误。
然后用extend使列表变平。我可能在blist创建中包含了以下内容:
然后很容易应用
np.unique
。实际上我们一点也不麻木,Python集也能做得很好