繁体   English   中英

Python Pandas 比较两个数据帧然后编辑

[英]Python Pandas compare two dataframes then edit

首先抱歉,如果这是重复的,我是初学者,所以我不太了解别人问题的全部含义。

我正在尝试为一个学校项目制作一个脚本,该脚本通过一个带有多个链接的大型 Excel 文件,并从网页上抓取价格,将其与 Excel 中实际价格列中的价格进行比较。 如果发现没有区别:很好,但如果确实如此。 它应该用它刚刚刮掉的新价格来编辑价格。

例如

Excel file : 

| Link        | Price          |
| --------    | -------------- |
| Product1    | 119            |
| Product2    | 89             |

Scraped data : 

| Price          |
| -------------- |
| 119            |
| 91             |

If this scenario happens, the Excel file should be edited to become like this : 

| Link        | Price          |
| --------    | -------------- |
| Product1    | 119            |
| Product2    | 91             |

现在我只能将价格刮成一个清单并将 Excel 文件转换为 Dataframe,但我真的不知道下一步该做什么......

这是我的代码

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

b =[]
tableau = pd.read_excel (r'PriceTrackerTrails\liens.xlsx')

links = pd.DataFrame(tableau, columns=['prix','liens'])

for i in links.index:
    html = requests.get(links['liens'][i]).text
    soup = bs(html, 'lxml')
    a = soup.find('span', {"itemprop":"price"}).text
    b.append(a)

print(links['prix'])
print(b)

output:

0    139,00
1        98
Name: prix, dtype: object
['139,00', '112,00']

Excel 文件如下所示: Excel 链接源文件

先感谢您 !

在 for 循环中,使用a中的值更新links['prix']中的值,如下所示:

for i in links.index:
    html = requests.get(links['liens'][i]).text
    soup = bs(html, 'lxml')
    a = soup.find('span', {"itemprop":"price"}).text
    b.append(a)
    links.loc[i, 'prix'] = a

要访问哪些行有价格更新,我会以不同的方式执行此操作,并在链接 dataframe 中创建一个新列,该列存储新价格而不是覆盖“prix”列中的值,并创建列表, b . 这样,验证数据会更容易,并且不需要单独的列表b 为此,您只需将loc方法更改为新的列名:

for i in links.index:
    html = requests.get(links['liens'][i]).text
    soup = bs(html, 'lxml')
    a = soup.find('span', {"itemprop":"price"}).text
    b.append(a)
    links.loc[i, 'prix_new'] = a

然后创建一个新的 dataframe ,其中仅包含价格发生变化的行,如下所示:

price_updated = links[links['prix']!=links['prix_new']].reset_index()

reset_index使这个新 dataframe 的行索引从 0 开始(默认情况下会复制)。 如果您想保留行索引,使其与links dataframe 匹配,则将reset_index替换为copy ,这样您就不会收到SettingWithCopyWarning警告,即有关更改 DataFrame 切片副本上的值的警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM