我有一个非常大的Python数据框,我想删除在特定列中包含特定字符串的所有行。
例如,我想要删除在数据框的列C中作为子字符串出现的所有行。
是否可以使用.drop()方法以高效的方式实现此目标?
pandas拥有向量化的字符串操作,因此您可以仅过滤包含不需要的字符串的行:
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")]
Out[93]:
A C
0 5 foo
1 3 bar
3 6 bat
df = df[~df['your column'].isin(['list of strings'])]
以上代码将删除包含列表元素的所有行。
对于字符串列表中的每个字符串,检查列是否包含它
。 - radtek如果您想比较精确字符串,那么这将起作用。如果您想检查列字符串是否包含列表中的任何字符串,则不起作用。
与列表进行比较的正确方法是:
searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]
df[~df.C.str.contains("XYZ", na=False)]
new_df = df[df.C != 'XYZ']
参考资料:https://chrisalbon.com/python/data_wrangling/pandas_dropping_column_and_rows/
df[df['C'] != 'XYZ']
为将上述代码中的值存储到数据框中:
newdf = df[df['C'] != 'XYZ']
df[~df.C.str.contains("XYZ") == True]
df[~df.C.str.contains("XYZ")]
。 - EdChumTypeError: bad operand type for unary ~: 'float'
,对于这个问题你有什么想法吗? - ah bonna=False
解决的问题。 - ah bon