在只包含给定字符串的pandas数据框中选择行(包含多个字符串)
问题描述:
我在操作2017 developer survey results。我想隔离那些只包含行的行字符串Python
在HaveWorkedLanguage
列中。在只包含给定字符串的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
的行?
答
对于完全匹配,==
运营商应该足够了。它不需要正则表达式。
df['HaveWorkedLanguage'] == 'Python'
返回一个布尔值过滤器,其中的值完全是'Python'。
传递这个过滤器数据框的产量:
df[df['HaveWorkedLanguage'] == 'Python']
Out:
HaveWorkedLanguage
18 Python
28 Python
也许'r'Python''作为一个正则表达式,而不是字符串 'Python的' – KyrSt
你的意思是使用'R “蟒”',而不是'Python'在上面的命令?试过了,没有变化。 – Gabriel
“只有Python”是否需要正则表达式? 'df ['HaveWorkedLanguage'] =='Python''应该为此创建一个布尔过滤器。 – ayhan