0
我有兩個大dataframes df1 --> 100K
行和df2 --> 600K
行,他們看起來像下面最快的搜索使用熊貓的Python
# df1
name price brand model
0 CANON CAMERA 20 FS36dINFS MEGAPIXEL 9900.0 CANON FS36dINFS
1 SONY HD CAMERA 25 MEGAPIXEL 8900.0 SONY
2 LG 55" 4K UHD LED Smart TV 55UJ635V 5890.0 LG 55UJ635V
3 Sony 65" LED Smart TV KD-65XD8505BAE 4790.0 SONY KD-65XD8505BAE
4 LG 49" 4K UHD LED Smart TV 49UJ651V 4390.0 LG 49UJ651V
#df2
name store price
0 LG 49" 4K UHD LED Smart TV 49UJ651V storeA 4790.0
1 SONY HD CAMERA 25 MEGAPIXEL storeA 12.90
2 Samsung 32" LED Smart TV UE-32J4505XXE storeB 1.30
我想匹配,如果在兩個大dataframes匹配的字符串的方法品牌和DF1其他功能是在DF2,如果他們存在,那麼我做一些事情。目前我使用過兩個dataframes迭代像下面
datalist = []
for idx1, row1 in df1.iterrow():
for idx2, row2 in df2.iterrows():
if(row1['brand'] in row2['name'] and row1['model'] in row2['name']):
datalist.append([row1['model'], row1['brand'], row1['name'], row1['price'], row2['name'],row2['price'], row2['store']])
的天真的做法但這服用大量的時間,因爲這兩個dataframes都大。我研究過集合更快,但在這裏,我使用數據框的方式使用iterrows,我無法轉換爲集合,因爲那樣我就失去了位置。有沒有更快的做到這一點?
當我跑的代碼,它引發'sre_constants.error:在位置515858'多個重複在線路'DF2 [COL] = DF2 [」 name']。str.extract(pat,expand = False)'...我認爲'515858'行的數據存在一些問題,所以現在我刪除了這一行,但它仍然繼續拋出相同的錯誤相同位置 – muazfaiz
「品牌」或「模型」中可能存在某些字符,例如背斜字符對正則表達式引擎有特殊意義,而我們希望字符被視爲字符串文字。解決方法是對我們想要解釋爲字符串文字的字符串調用're.escape'。我已更新代碼以顯示我的意思。 – unutbu
非常感謝!我花了很多時間來解決這個問題 – muazfaiz