如何在pandas数据框的列中搜索特定文本

时间:2016-02-25 02:08:35

标签: python-3.x pandas

我有一个包含26列的CSV文件。我试图找到某些文本,以便获得我需要的信息。这两列是“姓氏”,“名字”。

我在这里找到了这段代码,但我得不到我需要的东西。

dframe['First Name'].where(dframe['Last Name']="James","Turner")

我收到错误: SyntaxError:keyword不能是表达式

然后我尝试了第一个名字:

dframe['Last Name']=="Turner"

我得到659.000行的布尔值为False。

2 个答案:

答案 0 :(得分:1)

dframe['Last Name'] == 'Turner' 

上面的行生成pandas.Series个布尔项,表示'Last Name'列中的每个条目是否与'Turner'匹配

您可以使用pandas.Series布尔项来索引数据帧:

dframe[dframe['Last Name'] == 'Turner']

这应该为您提供所需的行选择。


现在,如果您只想查看所选行的'First Name',您可以

dframe[dframe['Last Name'] == 'Turner']['First Name']


如果要对名字和姓氏进行复合搜索,则需要在单个搜索结果之间执行按位布尔运算:

dframe[(dframe['First Name'] == 'John') & (dframe['Last Name'] == 'Turner')]


最后,为了给你一点奖励,如果你想找到包含'Turner'的所有姓氏,比如'Turner-Jones',你可以执行以下操作:

dframe[dframe['Last Name'].str.contains('Turner')] 

在上面的一行中,您使用.str上的pandas.Series访问者,这样您就可以访问一组非常方便的字符串方法。您可以在documentation中详细了解相关信息。


下面我将展示一个来自IPython会话的工作示例:

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: first_names = ['John', 'Tom', 'Fred', 'Michael', 'Andrew']

In [4]: last_names = ['Turner', 'Harden', 'Bryant', 'Davis', 'Turner']

In [5]: df = pd.DataFrame(list(zip(first_names, last_names)), columns=['First Na
me', 'Last Name'])

In [6]: df
Out[6]:
  First Name Last Name
0       John    Turner
1        Tom    Harden
2       Fred    Bryant
3    Michael     Davis
4     Andrew    Turner

In [7]: df[df['Last Name'] == 'Turner']
Out[7]:
  First Name Last Name
0       John    Turner
4     Andrew    Turner

In [8]: df[(df['First Name'] == 'John') & (df['Last Name'] == 'Turner')]
Out[8]:
  First Name Last Name
0       John    Turner

In [9]: df[df['Last Name'].str.contains('r')]
Out[9]:
  First Name Last Name
0       John    Turner
1        Tom    Harden
2       Fred    Bryant
4     Andrew    Turner

In [10]: (df['Last Name'] == 'Turner').any()
Out[10]: True

请注意,在标记为In[10]的输入中,我继续通过调用布尔any()上的pandas.Series方法验证是否存在任何匹配。如果您在获得预期结果时遇到问题,这可能是调试搜索的有用方法。

答案 1 :(得分:0)

尝试使用如下的.isin()。

dframe[dframe['Last Name'].isin(['James', 'Turner'])]

pandas.DataFrame.isin 返回boolean DataFrame,显示DataFrame中的每个元素是否包含在值中。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html