Pandas:如何选择不以字符串开头的行

572 阅读1分钟

你可以使用下面的基本语法来选择pandas DataFrame中不以特定字符串开头的行:

df[~df.my_column.str.startswith(('this', 'that'))]

这个特殊的公式会选择DataFrame中的所有行,其中名为my_column的列不是以字符串this或字符串that开头的。

下面的例子展示了如何在实践中使用这种语法。

例子:在Pandas中选择不以字符串开头的行

假设我们有如下的pandas数据框架,其中包含各种商店的销售信息:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'store': ['Upper East', 'Upper West', 'Lower East', 'West', 'CTR'],
                   'sales': [150, 224, 250, 198, 177]})

#view DataFrame
print(df)

        store  sales
0  Upper East    150
1  Upper West    224
2  Lower East    250
3        West    198
4         CTR    177     

我们可以使用下面的语法来选择DataFrame中所有不以商店列中的 "Upper "或 "Lower "字符串开头的行:

#select all rows where store does not start with 'Upper' or 'Lower'
df[~df.store.str.startswith(('Upper', 'Lower'))]

	store	sales
3	West	198
4	CTR	177

注意,唯一返回的行是那些商店列中没有以'Upper'或'Lower'开头的行。

如果你愿意,你也可以在**startswith()**函数之外定义字符串的元组:

#define tuple of strings
some_strings = ('Upper', 'Lower')

#select all rows where store does not start with strings in tuple
df[~df.store.str.startswith(some_strings)]

	store	sales
3	West	198
4	CTR	177

这产生的结果与前面的方法相同。

注意:你可以在这里找到pandas中startswith 函数的完整文档。

其他资源

下面的教程解释了如何在pandas中执行其他常见任务:

Pandas:如何根据字符串长度过滤行
Pandas:如何检查列是否包含字符串
Pandas:如何使用GroupBy串联字符串