我正在建立一个汽车销售网站预定刮擦。我有一个csv,上面有以前的广告,格式如下(为了整洁起见,大多数栏目都省略了):
id year first scan last scan active
OAG-AD-5459832 2005 31/01/2016 31/01/2016 Y
OAG-AD-12013782 2013 31/01/2016 31/01/2016 Y
OAG-AD-10487293 2015 31/01/2016 31/01/2016 Y
OAG-AD-12358252 1972 31/01/2016 31/01/2016 Y
AGC-AD-17247844 2015 31/01/2016 31/01/2016 Y
每个连续的scrape当前返回一个dict列表,如下所示:
[{'body': u'\xa0Coupe','id': u'SSE-AD-3469148', 'odo': u'288', 'adtype': u'Private Seller Car'},
{'body': u'\xa0Coupe', 'id': u'OAG-AD-12014474', 'odo': u'0', 'adtype': u'Dealer: Demo',}]
我有三个案子要处理:
我目前的a)代码如下。我不知道如何有效地完成b)和c),而不为现有广告复制新行。另外-我用熊猫打开csv文件,不知道我应该继续使用它的操纵或与dicts工作。你知道吗
date = datetime.datetime.now().strftime('%d/%m/%y') #last scan date
addb = pd.read_csv('pd output.csv') #csv of previously scraped ads
ids = addb['id'].tolist()
addbdict = addb.to_dict(orient='records')
newads = []
for ad in adscrape:
ad['last scan'] = date
ad['active'] = 'Y'
if ad['id'] not in ids:
ad['first scan'] = date
newads.append(ad)
addb2 = addb.append(newads)
addb2.to_csv('pd output2.csv', index=False)
不是简单地迭代新的广告,将它们添加到现有的数据框架工作中吗?
这种方法一次完成三个步骤:
如果
ad['id']
存在,则它将更新last_scan
和active
。如果
ad['id']
不存在,它将创建一个新行(不确定从何处获取Year
信息,因此它将是NaN
下面是我将如何使用Pandas功能实现这一点的大致方法:
注意
existing
索引变量:第一次,它用于匹配数据库中的已删除广告(步骤a/)。第二次和第三次,情况正好相反:它将数据库与刮下的广告进行匹配(步骤b/和c/)。因此,如果您感到困惑,可以随意重命名变量。你知道吗如果是熊猫,可能还有其他方法。
例如,我可以想象在
addb
和newads
之间使用“outer”连接创建一个大型数据帧,并从那里开始工作。你知道吗注意:我会避免在文件名中使用空格。它是可行的,但在某些时候更可能导致错误。使用下划线(
pd_output.csv
,或更合适的数据库文件名)或破折号(连字符)-
分隔单词。你知道吗相关问题 更多 >
编程相关推荐