python 如何基于字符串值列表对Pandas数据框进行子集化?

x759pob2  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(69)

我有一个dF,它有超过100 k行长,几列宽--没什么疯狂的,我试图基于一个大约4000个字符串的列表来子集化行,但是我很难弄清楚如何做到这一点,有没有一种方法可以使用类似的东西来子集化。
dF看起来像这样

dog_name    count
===================
Jenny        2
Fido         4
Joey         7
Yeller       2

字符串列表包含在变量dog_name_list=['Fido', 'Yeller']
我尝试了沿着df[df['dog_name'].isin(dog_name_list)的方法,但遇到了一个有趣的错误:unhashable type: 'list'
我已经检查了similar questiondocsthis的概要,通过查看列表中是否存在一个值来设置 Dataframe 的子集,但是这让我没有找到正确的地方,我对我错过了什么感到有点困惑。真的很感激有人的建议!

dbf7pr2w

dbf7pr2w1#

我相信你的狗名栏里有一张名单。
这样做效果很好:

>>> df[df['dog_name'].isin({'Fido', 'Yeller'})]
  dog_name  count
1     Fido      4
3   Yeller      2

但是如果你的其中一只狗碰巧有一个名字列表而不是字符串,你将得到TypeError: unhashable type: 'list'

df.ix[4] = (['a'], 2)
>>> df
  dog_name  count
0    Jenny      2
1     Fido      4
2     Joey      7
3   Yeller      2
4      [a]      2

>>> df[df['dog_name'].isin({'Fido', 'Yeller'})]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-1b68dd948f39> in <module>()
----> 1 df[df['dog_name'].isin({'Fido', 'Yeller'})]
...
pandas/lib.pyx in pandas.lib.ismember (pandas/lib.c:5014)()

TypeError: unhashable type: 'list'

找到那些坏狗:

>>> df[[isinstance(dog, list) for dog in df.dog_name]]
  dog_name  count
4      [a]      2

要查找列中的所有数据类型:

>>> set((type(dog) for dog in df.dog_name))
{list, str}

相关问题