我有一个非常大的数据框在python中,我想删除所有具有特定字符串内的特定字符串的行。如何从包含特定列中特定字符串的熊猫数据框中删除行?
例如,我想删除所有具有字符串“XYZ”的行作为数据框C列中的子字符串。
这可以使用.drop()方法以有效的方式实现吗?
我有一个非常大的数据框在python中,我想删除所有具有特定字符串内的特定字符串的行。如何从包含特定列中特定字符串的熊猫数据框中删除行?
例如,我想删除所有具有字符串“XYZ”的行作为数据框C列中的子字符串。
这可以使用.drop()方法以有效的方式实现吗?
大熊猫已矢量字符串操作,所以你可以过滤掉包含字符串的行你不想:
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
如果字符串约束不只是一个字符串,你可以将这些相应的行搭配:
df = df[~df['your column'].isin(['list of strings'])]
以上将丢弃包含列表
的元素本,如果你想比较确切的字符串只会工作的所有行。 如果您想检查列字符串是否包含列表中的任何字符串,它将不起作用。 与列表进行比较正确的做法应该是:
searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]
虽然你写的是正确的,更具可读性,更短的方法是:'DF [〜df.C.str.contains(“XYZ”) ]' – EdChum 2015-02-23 17:58:16