df ['X']。unique()和TypeError:无法散列的类型:'numpy.ndarray'

时间:2018-08-03 14:46:42

标签: python pandas group-by

全部

我在数据框中有一个看起来像这样的列:

allHoldingsFund['BrokerMixed']
Out[419]: 
78         ML
81       CITI
92         ML
173      CITI
235        ML
262        ML
264        ML
25617      GS
25621    CITI
25644    CITI
25723      GS
25778    CITI
25786    CITI
25793      GS
25797    CITI
Name: BrokerMixed, Length: 2554, dtype: object

尽管该列是一个对象。我无法按该列分组,甚至无法提取该列的唯一值。例如,当我这样做时:

allHoldingsFund['BrokerMixed'].unique()

我遇到错误

     uniques = table.unique(values)
  File "pandas/_libs/hashtable_class_helper.pxi", line 1340, in pandas._libs.hashtable.PyObjectHashTable.unique
TypeError: unhashable type: 'numpy.ndarray'

分组时也会出现错误。

欢迎任何帮助。谢谢

3 个答案:

答案 0 :(得分:1)

首先,我建议您检查type中的column。您可以尝试如下

print (type(allHoldingsFund['BrokerMixed']))

如果这是dataframe series,则可以尝试

allHoldingsFund['BrokerMixed'].reset_index()['BrokerMixed'].unique()

并检查它是否适合您。

答案 1 :(得分:1)

您的数据列中有一个数组,您可以尝试以下操作

allHoldingsFund['BrokerMixed'].apply(lambda x: str(x)).unique()

答案 2 :(得分:1)

好像您的系列中有一个NumPy数组。但是您不能对NumPy数组进行哈希处理,而pd.Series.uniqueset一样,也依赖于哈希处理。

如果不能确保系列数据仅包含字符串,则可以在调用pd.Series.unique之前将NumPy数组转换为元组:

s = pd.Series([np.array([1, 2, 3]), 1, 'hello', 'test', 1, 'test'])

def tuplizer(x):
    return tuple(x) if isinstance(x, (np.ndarray, list)) else x

res = s.apply(tuplizer).unique()

print(res)

array([(1, 2, 3), 1, 'hello', 'test'], dtype=object)

当然,这意味着您的数据类型信息会在结果中丢失,但是至少您可以看到“唯一的” NumPy数组,只要它们是一维的即可。