如何根据字符串列表对pandas数据框进行子集?[英] How do I subset a pandas data frame based on a list of string values?

本文是小编为大家收集整理的关于如何根据字符串列表对pandas数据框进行子集?的处理方法,想解了如何根据字符串列表对pandas数据框进行子集?的问题怎么解决?如何根据字符串列表对pandas数据框进行子集?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个超过 10 万行长、几列宽的 dF——这没什么奇怪的.我正在尝试根据大约 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'

我检查了 类似的问题docsthis 通过查看列表中是否存在值来对数据帧进行子集化,但这让我无处可去,我对我的内容有点困惑我失踪了.非常感谢有人的建议!

推荐答案

相信你的狗名栏里有一个列表.

这很好用:

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

但是如果你添加一个列表:

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}

本文地址:https://www.itbaoku.cn/post/1728056.html