2017-06-18 125 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