Pandas.DataFrame按字符串列

时间:2017-12-08 23:45:44

标签: python string pandas dataframe filtering

我有一个像这样的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

但实际上我得到的只是错误。

2 个答案:

答案 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