2017-06-18 131 views
1

我在操作2017 developer survey results。我想隔离那些只包含行的行字符串PythonHaveWorkedLanguage列中。在只包含给定字符串的pandas数据框中选择行(包含多个字符串)

这是df['HaveWorkedLanguage']栏的样子:

0             Swift 
1       JavaScript; Python; Ruby; SQL 
2          Java; PHP; Python 
3          Python; R; SQL 
4             NaN 
5         JavaScript; PHP; Rust 
6          Matlab; Python 
7  CoffeeScript; Clojure; Elixir; Erlang; Haskell 
8          C#; JavaScript 
9         Objective-C; Swift 
10            R; SQL 
11             NaN 
12           C; C++; Java 
13       Java; JavaScript; Ruby; SQL 
14          Assembly; C; C++ 
15         JavaScript; VB.NET 
16           JavaScript 
17      Python; Matlab; Rust; SQL; Swift 
18            Python 
19           Perl; Python 
20             NaN 
21         C#; JavaScript; SQL 
22             Java 
23           Python; SQL 
24             NaN 
25           Java; Scala 
26   Java; JavaScript; Objective-C; Python; Swift 
27             NaN 
28            Python 
29             NaN 
... 

我尝试使用pandas.Series.str.match这应该:

确定每个字符串正则表达式匹配。

如这里

import pandas as pd 
df = pd.read_csv("survey_results_public.csv") 
rows_w_Python = df[df['HaveWorkedLanguage'].str.match("Python", na=False)]['HaveWorkedLanguage'] 

问题示出的是,这个选择包含Python作为第一条目的那些行,而不是那些含有Python,其resulsts在:

3          Python; R; SQL 
17      Python; Matlab; Rust; SQL; Swift 
18            Python 
23           Python; SQL 
28            Python 
... 

我如何保留仅包含Python的行?

+0

也许'r'Python''作为一个正则表达式,而不是字符串 'Python的' – KyrSt

+0

你的意思是使用'R “蟒”',而不是'Python'在上面的命令?试过了,没有变化。 – Gabriel

+2

“只有Python”是否需要正则表达式? 'df ['HaveWorkedLanguage'] =='Python''应该为此创建一个布尔过滤器。 – ayhan

回答

2

对于完全匹配,==运营商应该足够了。它不需要正则表达式。

df['HaveWorkedLanguage'] == 'Python'返回一个布尔值过滤器,其中的值完全是'Python'。

传递这个过滤器数据框的产量:

df[df['HaveWorkedLanguage'] == 'Python'] 
Out: 
    HaveWorkedLanguage 
18    Python 
28    Python