我有一个像这样的DataFrame:
import pandas as pd
df = pd.DataFrame()
df['trans'] = ['none', 'taxi', 'bus_101', 'bus_105', 'bus_106', 'car', 'horse']
df['cost'] = [1, 2, 3, 4, 5, 6, 7]
我想过滤掉所有的公共汽车('bus_101', 'bus_105', 'bus_106'
)
我尝试了两种方法:
df['bus' not in df.trans].trans
试图从系列中获得一个str,来比较它的前3个字符:
df[df.trans[:3] != 'bus'].trans
和
df[df.trans.astype(str)[:3] != 'bus'].trans
没有成功。我希望结果是:
0 none
1 taxi
5 car
6 horse
但实际上我得到的只是错误。
答案 0 :(得分:0)
您可以使用str.contains
df[~df.trans.str.contains('bus')]
trans cost
0 none 1
1 taxi 2
5 car 6
6 horse 7
简要说明:
df.trans.str.contains('bus')
将检查'bus'
:
trans
0 False
1 False
2 True
3 True
4 True
5 False
6 False
Name: trans, dtype: bool
可以通过~
~df.trans.str.contains('bus')
0 True
1 True
2 False
3 False
4 False
5 True
6 True
Name: trans, dtype: bool
此布尔系列可以传递给df
以选择所需的条目。
答案 1 :(得分:0)
这应该有效:
import pandas as pd
df= pd.DataFrame()
df['trans'] = ['none', 'taxi', 'bus_101', 'bus_105', 'bus_106', 'car', 'horse']
df['cost'] = [1, 2, 3, 4, 5, 6, 7]
df[df['trans'].str.contains("bus") == False]
trans cost
0 none 1
1 taxi 2
5 car 6
6 horse 7