Python 与系列、列表和唯一元素混淆
我想寻求一些帮助,因为我无法理解python程序中的TypeError。 这段代码:Python 与系列、列表和唯一元素混淆,python,list,pandas,typeerror,series,Python,List,Pandas,Typeerror,Series,我想寻求一些帮助,因为我无法理解python程序中的TypeError。 这段代码: users2 = np.random.choice(users,5000).tolist() print len(users2) print users2[0:20] for user in users2: tags.append(user_counters["tags"].loc[user]) print type(tags) print set(tags) 标记的类型为列表。但当我应用set()
users2 = np.random.choice(users,5000).tolist()
print len(users2)
print users2[0:20]
for user in users2:
tags.append(user_counters["tags"].loc[user])
print type(tags)
print set(tags)
标记的类型为列表。但当我应用set()方法获取“tags”列表的唯一元素时,出现以下错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed
好的,我明白它的意思,但我不明白什么是“系列”类型
另一方面,如果使用:
print tags.unique()
出现另一个错误:
AttributeError: 'list' object has no attribute 'unique'
注:用户计数器是数据帧的类型和用户列表的类型,其元素来自用户计数器
既然tag是list,set()是list,为什么会发生TypeError错误呢
感谢您的adnvance您的
标签
是熊猫系列
对象的列表。从数据框中基于loc
的选择构建列表时:
for user in users2:
tags.append(user_counters["tags"].loc[user])
您将获得一个系列
。然后,您尝试从系列列表中创建一个集合,但您不能,因为系列是不可散列的
既然标记是list,set()是list,为什么会发生TypeError错误呢
名单
嗯set
接受任何iterable,该iterable的元素用于构造生成的set
。您的iterable是一个列表
,元素是pandas.Series
对象。这就是问题所在
我怀疑您有一个数据帧,它由一系列表示用户的字符串索引
>>> df = pd.DataFrame({'tag':[1,2,3, 4], 'c':[1.4,3.9, 2.8, 6.9]}, index=['ted','sara','anne', 'ted'])
>>> df
c tag
ted 1.4 1
sara 3.9 2
anne 2.8 3
ted 6.9 4
>>>
当您进行选择时,由于您的用户索引具有非唯一的数据元素,因此当您进行以下选择时,您将得到一个系列
:
>>> df['tag'].loc['ted']
user
ted 1
ted 4
Name: a, dtype: int64
>>> type(df['a'].loc['ted'])
<class 'pandas.core.series.Series'>
>>df['tag'].loc['ted']
用户
特德1
ted 4
名称:a,数据类型:int64
>>>类型(df['a'].loc['ted'])
您的标签
是熊猫系列
对象的列表。从数据框中基于loc
的选择构建列表时:
for user in users2:
tags.append(user_counters["tags"].loc[user])
您将获得一个系列
。然后,您尝试从系列列表中创建一个集合,但您不能,因为系列是不可散列的
既然标记是list,set()是list,为什么会发生TypeError错误呢
名单
嗯set
接受任何iterable,该iterable的元素用于构造生成的set
。您的iterable是一个列表
,元素是pandas.Series
对象。这就是问题所在
我怀疑您有一个数据帧,它由一系列表示用户的字符串索引
>>> df = pd.DataFrame({'tag':[1,2,3, 4], 'c':[1.4,3.9, 2.8, 6.9]}, index=['ted','sara','anne', 'ted'])
>>> df
c tag
ted 1.4 1
sara 3.9 2
anne 2.8 3
ted 6.9 4
>>>
当您进行选择时,由于您的用户索引具有非唯一的数据元素,因此当您进行以下选择时,您将得到一个系列
:
>>> df['tag'].loc['ted']
user
ted 1
ted 4
Name: a, dtype: int64
>>> type(df['a'].loc['ted'])
<class 'pandas.core.series.Series'>
>>df['tag'].loc['ted']
用户
特德1
ted 4
名称:a,数据类型:int64
>>>类型(df['a'].loc['ted'])