簡體   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