通过np.char.find比较两列的pandas数据帧会得到TypeError:非字符串数组上的字符串操作

时间:2018-10-26 15:51:33

标签: python pandas numpy

我希望比较两个字符串系列,以查找其中一个元素是否包含另一个元素。

我首先尝试使用apply,但是速度很慢:

cols = ['s1','s2']
list_of_series = [pd.Series(['one','sdf'],index=cols), pd.Series(['two','x y two'],index=cols)]
df = pd.DataFrame(list_of_series, columns=cols)
df
    s1  s2
0   one sdf
1   two x y two

df.apply(lambda row: row['s1'] in row['s2'], axis=1)
0    False
1    True 
dtype: bool

似乎可以使用以下代码:

x=np.array(['one','two'])
y=np.array(['sdf','x y two'])

np.char.find(y,x)
array([-1,  4])

但是如果我有一个数据框,则会出现错误:

np.char.find(df.s2.values,df.s1.values)
TypeError: string operation on non-string array

有人可以提出解决方案吗?

1 个答案:

答案 0 :(得分:8)

使用find中的numpy.core并添加astype str

from numpy.core.defchararray import find
find(df.s2.values.astype(str),df.s1.values.astype(str))!=-1
Out[430]: array([False,  True])