iT邦幫忙

0

[解決]LIST 無法刪除指定範圍資料

  • 分享至 

  • xImage
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]則迴圈測試正常,不知原因為何?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
hokou
iT邦好手 1 級 ‧ 2023-08-31 12:09:41

推測用 querryAns 跑迴圈
但中間又用 del querryAns 刪掉部分
所以你的迴圈已經被改掉了喔
可能改用一組新的 list 去調整

看更多先前的回應...收起先前的回應...
miguok iT邦新手 5 級 ‧ 2023-08-31 12:19:05 檢舉

hokou大,謝謝你的建議。在新增一組list測試後發現,del那行依舊會出問題。在del之前,有print沒有問題,但到del這行後,就跳出迴圈了(try失敗了)。

                    #刪除符合資料前的所有資料↓NG就差這行
                    querryAnsNew = querryAns
                    del querryAnsNew[0:sn]
                    print(querryAnsNew) #確認刪除後資料
hokou iT邦好手 1 級 ‧ 2023-08-31 13:03:27 檢舉

方便補一下 querryAnsdf_exist 的資料架構跟錯誤的訊息是什麼呢

code840 iT邦新手 5 級 ‧ 2023-08-31 14:07:24 檢舉

新的list改成這樣
querryAnsNew = querryAns.copy()

hokou iT邦好手 1 級 ‧ 2023-08-31 14:29:44 檢舉

用 = 還是同個 list
是指改 copy 後解決了的意思嗎?

miguok iT邦新手 5 級 ‧ 2023-09-01 02:00:06 檢舉

謝謝兩位大大熱心指點,上夜班去把兩位冷落了,抱歉。

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,不知道這樣是否為你要的答案呢?

謝謝兩位大大拔刀相助`````晚安啦

hokou iT邦好手 1 級 ‧ 2023-09-01 08:06:54 檢舉

可以先把 try except 拿掉,看一下看程式直接說是哪一行出錯
搞不好是下一行合併結果大小不同的問題

然後在錯誤前 debug 中斷點或用 print 把 querryAns df_exist 先印出來看看結果是否如你所想

miguok iT邦新手 5 級 ‧ 2023-09-01 08:10:37 檢舉

兩位大大早安~~~~

最後成功試出問題點在del這行指令,修改為querryAns = querryAns.drop(querryAns.index[:sn])即可,且資料表不用再複制一份出來。

謝謝兩位大大的友誼之手~~~後會有期^^

hokou iT邦好手 1 級 ‧ 2023-09-01 09:16:00 檢舉

補充:
看來是因為格式是 DataFrame,不是 list
用 del 一次只能刪除一列,不能一次删除多列,所以跳錯

python 使用del和drop方法删除DataFrame的列,使用drop方法一次删除多列
Python教程:从DataFrame中删除列
Delete a column from a Pandas DataFrame

miguok iT邦新手 5 級 ‧ 2023-09-01 11:16:29 檢舉

謝謝hokou大大提供學習資源,我目前也只是先試出結果 至於為什麼,還真得不知道~~~

我要發表回答

立即登入回答