你可以使用下面的基本语法来选择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串联字符串