我从列表中抓取一个网页(我的 df 的一列转换为包含重复单词的列表)并将结果返回到 df。我需要在抓取时找到一种排除重复项的方法(以减少时间)但是,在出现重复的同时,我需要为所有重复的单词填写导出值。 示例:
my_column `result`
string1 Yes
string2 No
string3 Yes
string2 No
string1 Yes
string4 No
这是通过使用 my_column 中的关键字,一一获得,没有避免重复。 是否有一种逻辑可以使用,以便在重复的情况下只使用第一个值来抓取但在结果列中填充每个关键字的结果?
这是我的代码
for keyword in final_list:
for index, row in data_splitted2.iterrows():
if keyword == row['my_column']:
if keyword == None:
break
# print(keyword)
link = website + 'search/q?name=' + keyword
driver.get(link)
time.sleep(5)
try:
status = driver.find_element_by_class_name("yyyyy")
row['result'] = status.text
except NoSuchElementException:
pass
最后一次提到,在我的最终 df 中,我需要保留重复的关键字,以便在抓取时将它们传递但出现在我的最终 df 中。
非常感谢
`
答案 0 :(得分:1)
如果我理解正确的话,您可能正在寻找类似下面的内容。它非常简化,只是为了响应特定问题:
假设你有这个数据框:
data = ['string1', 'string2', 'string3', 'string2', 'string1', 'string4']
result = ['','','','','','']
df = pd.DataFrame(columns=["my_column",'result'])
df['my_column'],df['result'] = data,result
我们可以在执行操作时跳过重复项,但将这些操作的结果分配给所有行,包括重复项:
for val in df.my_column.unique():
state = "Yes" if random.randint(1,2)==1 else "No"
#in your actual code, the above line will probably have to be replaced with status.text
df.loc[df['my_column'] == val, 'result'] = state
df
随机输出:
my_column result
0 string1 No
1 string2 Yes
2 string3 Yes
3 string2 Yes
4 string1 No
5 string4 No