如何根据字符串值列表对熊猫数据框进行子集设置?

scr*_*lex 5 python pandas

我有一个dF,它的长度超过10万行,宽度为几列-没什么疯狂的。我试图基于约4000个字符串的列表来对行进行子集化,但是却在努力寻找方法。有没有办法使用类似的子集。

dF看起来像这样

dog_name    count
===================
Jenny        2
Fido         4
Joey         7
Yeller       2
Run Code Online (Sandbox Code Playgroud)

字符串列表包含变量 dog_name_list=['Fido', 'Yeller']

我已经尝试了的类似方法 df[df['dog_name'].isin(dog_name_list),但遇到了一个有趣的错误:unhashable type: 'list'

我已经通过查看列表中是否存在值来检查了类似的问题文档细分数据集的框架,但这使我无处可去,而我对丢失的内容感到有些困惑。真的会感谢别人的建议!

Ale*_*der 5

我相信您的狗名栏中有一个列表。

这很好用:

>>> df[df['dog_name'].isin(['Fido', 'Yeller'])]
  dog_name  count
1     Fido      4
3   Yeller      2
Run Code Online (Sandbox Code Playgroud)

但是,如果添加列表:

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

要找到那些坏狗:

>>> df[[isinstance(dog, list) for dog in df.dog_name]]
  dog_name  count
4      [a]      2
Run Code Online (Sandbox Code Playgroud)

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

>>> set((type(dog) for dog in df.dog_name))
{list, str}
Run Code Online (Sandbox Code Playgroud)

  • 尽量确保数据都是字符串:`all((isinstance(dog, str) for dog in df.dog_name))` (2认同)