如何从 pandas 数据框中删除特定列中包含特定字符串的行?
How to drop rows from pandas data frame that contains a particular string in a particular column?
我在 python 中有一个非常大的数据框,我想删除在特定列中具有特定字符串的所有行。
例如,我想删除所有将字符串 "XYZ" 作为数据框 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'])]
以上将删除包含列表元素的所有行
这仅在您想比较精确的字符串时才有效。
如果您想检查列字符串是否包含列表中的任何字符串,它将不起作用。
与列表进行比较的正确方法是:
searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]
new_df = df[df.C != 'XYZ']
参考:https://chrisalbon.com/python/data_wrangling/pandas_dropping_column_and_rows/
如果您不想删除所有 NaN,请使用
df[~df.C.str.contains("XYZ") == True]
下面的代码将为您提供所有行的列表:-
df[df['C'] != 'XYZ']
将上述代码中的值存储到数据框中:-
newdf = df[df['C'] != 'XYZ']
对代码略作修改。 na=False 将跳过空值。否则你会得到一个错误 TypeError: bad operand type for unary ~: float
df[~df.C.str.contains("XYZ", na=False)]
来源:
我在 python 中有一个非常大的数据框,我想删除在特定列中具有特定字符串的所有行。
例如,我想删除所有将字符串 "XYZ" 作为数据框 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'])]
以上将删除包含列表元素的所有行
这仅在您想比较精确的字符串时才有效。 如果您想检查列字符串是否包含列表中的任何字符串,它将不起作用。
与列表进行比较的正确方法是:
searchfor = ['john', 'doe']
df = df[~df.col.str.contains('|'.join(searchfor))]
new_df = df[df.C != 'XYZ']
参考:https://chrisalbon.com/python/data_wrangling/pandas_dropping_column_and_rows/
如果您不想删除所有 NaN,请使用
df[~df.C.str.contains("XYZ") == True]
下面的代码将为您提供所有行的列表:-
df[df['C'] != 'XYZ']
将上述代码中的值存储到数据框中:-
newdf = df[df['C'] != 'XYZ']
对代码略作修改。 na=False 将跳过空值。否则你会得到一个错误 TypeError: bad operand type for unary ~: float
df[~df.C.str.contains("XYZ", na=False)]
来源: