我有一个包含 26 列的 CSV 文件。我正在尝试查找某些文本,以便获得我需要的信息。两列是“姓氏”、“名字”。
我在这里找到了这段代码,但我没有得到我需要的东西。
dframe['First Name'].where(dframe['Last Name']="James","Turner")
我收到错误:SyntaxError:关键字不能是表达式
然后我只尝试了名字:
dframe['Last Name']=="Turner"
我得到 659.000 行的布尔值 False。
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,这使您可以访问一组非常方便的字符串方法。您可以在文档中阅读更多相关信息。
 
下面我展示了 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()boolean 上的方法来验证是否有任何匹配项pandas.Series。如果您在获取预期结果时遇到问题,这可能是调试搜索的有用方法。
| 归档时间: | 
 | 
| 查看次数: | 13994 次 | 
| 最近记录: |