2015-02-23 84 views

回答

50

大熊猫已矢量字符串操作,所以你可以过滤掉包含字符串的行你不想:

In [91]: df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"])) 

In [92]: df 
Out[92]: 
    A   C 
0 5  foo 
1 3  bar 
2 5 fooXYZbar 
3 6  bat 

In [93]: df[df.C.str.contains("XYZ") == False] 
Out[93]: 
    A C 
0 5 foo 
1 3 bar 
3 6 bat 
+18

虽然你写的是正确的,更具可读性,更短的方法是:'DF [〜df.C.str.contains(“XYZ”) ]' – EdChum 2015-02-23 17:58:16

15

如果字符串约束不只是一个字符串,你可以将这些相应的行搭配:

df = df[~df['your column'].isin(['list of strings'])] 

以上将丢弃包含列表

+0

你会怎么做呢?我想检查列值是否包含任何字符串。伪:'为list_of_strings中的字符串,检查列是否包含它' – radtek 2017-04-23 05:39:42

+1

只需删除“〜” df = df [df ['your column']。isin(['list of strings'])] – ksooklall 2017-06-26 18:28:30

+0

已经有了,但是谢谢 – radtek 2017-06-27 17:54:57

5

的元素本,如果你想比较确切的字符串只会工作的所有行。 如果您想检查列字符串是否包含列表中的任何字符串,它将不起作用。 与列表进行比较正确的做法应该是:

searchfor = ['john', 'doe'] 
    df = df[~df.col.str.contains('|'.join(searchfor))]