for sn, d in enumerate(querryAns.index): #使用新查詢清單資料,逐筆取出日期比對,若較新則新增至df_exist
if d > df_exist.index[-1]: #如果比現存最後一筆資料還新則新增上去
#刪除符合比對資料前的重覆資料
del querryAns[0:sn]
#一次更新其後的所有資料
df_exist = pd.concat([df_exist,querryAns], axis = 0)
print('更新成功囉')
#因為已一次更新所以跳出比對
if d > df_exist.index[-1]:
break
else:
pass
else:
print("無需更新")
df_exist.to_csv(address,encoding='utf-8') #整個比對結束後一次寫入檔案 待測試
print("已更新到最新資料")
只要拿掉del querryAn[0:sn]則迴圈測試正常,不知原因為何?
推測用 querryAns
跑迴圈
但中間又用 del querryAns
刪掉部分
所以你的迴圈已經被改掉了喔
可能改用一組新的 list 去調整
hokou大,謝謝你的建議。在新增一組list測試後發現,del那行依舊會出問題。在del之前,有print沒有問題,但到del這行後,就跳出迴圈了(try失敗了)。
#刪除符合資料前的所有資料↓NG就差這行
querryAnsNew = querryAns
del querryAnsNew[0:sn]
print(querryAnsNew) #確認刪除後資料
方便補一下 querryAns
、df_exist
的資料架構跟錯誤的訊息是什麼呢
新的list改成這樣
querryAnsNew = querryAns.copy()
用 = 還是同個 list
是指改 copy 後解決了的意思嗎?
謝謝兩位大大熱心指點,上夜班去把兩位冷落了,抱歉。
To:code840大大
依建議修改新list成querryAnsNew = querryAns.copy(),也成功print出來和原本querryAns的內容,但是下一行執行del querryAnsNew[0:sn]後發生一樣的問題,直接跳到except,中斷了。
關於copy指令,查到了一個deepcopy想測試,但import copy時卻失敗,再找時間測試。
To:hokou大大
剛測試了,尚未成功,錯誤訊息這部份我還不知道如何使用,目前只會用tye except在錯誤時print執行失敗的訊息。
querryAns是爬蟲的pd.datafram,df_exist是pd.read_csv,不知道這樣是否為你要的答案呢?
謝謝兩位大大拔刀相助`````晚安啦
可以先把 try except 拿掉,看一下看程式直接說是哪一行出錯
搞不好是下一行合併結果大小不同的問題
然後在錯誤前 debug 中斷點或用 print 把 querryAns df_exist 先印出來看看結果是否如你所想
兩位大大早安~~~~
最後成功試出問題點在del這行指令,修改為querryAns = querryAns.drop(querryAns.index[:sn])即可,且資料表不用再複制一份出來。
謝謝兩位大大的友誼之手~~~後會有期^^
補充:
看來是因為格式是 DataFrame,不是 list
用 del 一次只能刪除一列,不能一次删除多列,所以跳錯
python 使用del和drop方法删除DataFrame的列,使用drop方法一次删除多列
Python教程:从DataFrame中删除列
Delete a column from a Pandas DataFrame
謝謝hokou大大提供學習資源,我目前也只是先試出結果 至於為什麼,還真得不知道~~~