我有df
,我需要使用str.contains
,但我有很多条件,而且df1
。
我试试
df2[df2['url'].str.contains[df3['buys']]]
但它会返回
TypeError: 'instancemethod' object has no attribute '__getitem__'
怎么了?
df2
看起来像
url used_at \
0 eldorado.ru/personal/order.php?step=confirm&Cu... 2016-04-01 00:16:46
1 eldorado.ru/personal/order.php?step=confirm&Cu... 2016-04-01 00:19:56
2 shoppingcart.aliexpress.com/order/confirm_orde... 2016-04-01 00:29:17
3 shoppingcart.aliexpress.com/order/confirm_orde... 2016-04-01 00:29:43
4 icashier.alipay.com/payment/payment-result.htm... 2016-04-01 00:30:11
5 shoppingcart.aliexpress.com/order/confirm_orde... 2016-04-01 00:31:11
6 icashier.alipay.com/payment/payment-result.htm... 2016-04-01 00:31:27
7 kupivip.ru/shop/checkout/confirmation 2016-04-01 00:49:13
8 kupivip.ru/shop/checkout/confirmation 2016-04-01 00:49:37
9 lk.wildberries.ru/basket/orderconfirmed?orderI... 2016-04-01 01:25:25
df3
看起来像
buy
shoppingcart.aliexpress.com/order/confirm_order
ozon.ru?context=order_done
lk.wildberries.ru/basket/orderconfirmed
lamoda.ru/checkout/onepage/success/quick
mvideo.ru/homeshop/order.php
eldorado.ru/personal/order.php?step=confirm
ulmart.ru/checkout/confirm
checkout.payments.ebay.com/*pagename=success
svyaznoy.ru/cart/order/created
答案 0 :(得分:1)
你需要括号:
df2[df2['url'].str.contains(df3['buys'])]
错误
TypeError: 'instancemethod' object has no attribute '__getitem__'
表示你在一个不知道如何处理方括号的对象后使用方括号。
当你使用方括号时,python使用方括号在对象上调用方法__getitem__
。在这种情况下,str.contains[]
。你应该用括号str.contains()
来调用它。
这应该有助于您到达您需要的地方。请记住,您可能需要对此进行调整。而且,这是超级黑客。
matches = pd.DataFrame([], df2.url, df3.buy).apply(lambda x: x.index.str.contains(x.name)).stack()
matches[matches].index.levels[0]
Index([u'eldorado.ru/personal/order.php?step=confirm&Cu...',
u'icashier.alipay.com/payment/payment-result.htm...',
u'kupivip.ru/shop/checkout/confirmation',
u'lk.wildberries.ru/basket/orderconfirmed?orderI...',
u'shoppingcart.aliexpress.com/order/confirm_orde...'],
dtype='object', name=u'url')
答案 1 :(得分:0)
IIUC你可以传递加入内容的正则表达式:
In [180]:
df = pd.DataFrame({'a':['hello','world','python']})
df1 = pd.DataFrame({'a':['hello','johnny']})
df[df['a'].str.contains('|'.join(df1['a']))]
Out[180]:
a
0 hello
所以在你的情况下:
df2[df2['url'].str.contains('|'.join(df3['buys']))]
应该有效
在这里,我展示了join
:
In [182]:
'|'.join(df1['a'])
Out[182]:
'hello|johnny'