df ['X'].unique() 和 TypeError:不可散列类型:'numpy.ndarray'

SBa*_*Bad 7 python group-by pandas

全部,

我的数据框中有一列,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

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

allHoldingsFund['BrokerMixed'].unique()
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

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

当我进行分组时,我也遇到错误。

欢迎任何帮助。谢谢

Sah*_*uri 5

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

allHoldingsFund['BrokerMixed'].apply(lambda x: str(x)).unique()
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

看起来您的系列中有一个 NumPy 数组。但是您无法对 NumPy 数组进行哈希处理pd.Series.unique,并且像 一样set依赖于哈希处理。

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

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)
Run Code Online (Sandbox Code Playgroud)

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


Har*_*_pb 0

首先我建议你检查一下type你的column. 您可以尝试如下

print (type(allHoldingsFund['BrokerMixed']))
Run Code Online (Sandbox Code Playgroud)

如果这是一个dataframe series,你可以尝试

allHoldingsFund['BrokerMixed'].reset_index()['BrokerMixed'].unique()
Run Code Online (Sandbox Code Playgroud)

并检查这是否适合您。

EDIT 2020:您获得独特和提到的答案的方法使用 Python 3 获取相同的结果

在此输入图像描述