我有以下格式的数据框(实际上是〜200,000行。其中〜20%是活动的-'Y',其余为'N'):
active adtype body eng first scan id
N Private Seller Car  Coupe  8cyl 4.7L 31/01/2016 SSE-AD-3469148
Y Dealer: Near New  Coupe  12cyl 6.5L 31/01/2016 OAG-AD-12326299
N Dealer: Used Car  Coupe  12cyl 6.5L 31/01/2016 OAG-AD-6834787
我正在创建一个ID列表,然后将其与某些网站抓取数据进行交叉检查以查找新项目:
database_ids = database_records['id'].tolist() #simple list of ad IDs from CSV
database_ids = set(database_ids)
database_dicts = database_records.to_dict(orient='records') #Converted to list of dicts
newads = []
adscrape_ids = []
#Search database for existing ads. Append new ads to 'newads'
for ad in adscrape:
ad['last scan'] = date
ad['active'] = 'Y'
adscrape_ids.append(ad['id'])
if ad['id'] not in database_ids:
ad['first scan'] = date
print 'new ad:',ad
newads.append(ad)
我想通过将database_ids限制为仅仍处于活动状态('Y')的ID来加快此过程。是否有任何特定于熊猫的有效方法来执行此操作,或者我应该创建一个循环:
for row in database_dicts:
if row['active'] == 'Y':
database_ids.append(row['id'])
database_ids = set(database_ids)
您可以更有效地执行此操作(我敢打赌,您将能够看到明显的速度差异):
set(database_dicts[database_dicts.active == 'Y']['id'].unique())
database_dicts[database_dicts.active == 'Y']
过滤并保留所需的行。
.unique()
将返回唯一值(在这种情况下,该id
列的值)。
在一般情况下,你应该尝试做尽可能多的,而数据在数据帧-这是很多比循环和纯Python更高效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句