Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与系列、列表和唯一元素混淆_Python_List_Pandas_Typeerror_Series - Fatal编程技术网

Python 与系列、列表和唯一元素混淆

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()

我想寻求一些帮助,因为我无法理解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()方法获取“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'])