我正在嘗試從Date列上的資料框中讀取,如果某個日期不存在,則為該日期插入新資料。
我試圖用谷歌搜索如何知道是否沒有退貨,但我找不到任何結果。
所以這就是我處理它的方式,如果回傳是KeyError,那么我插入日期資料。但我擔心的是,如果KeyError不是因為資料不存在怎么辦?
或者有什么比像這樣捕獲 KeyError 更好的方法嗎?
我的代碼
def checkdata(ticker, date):
try:
data = pd.read_sql(ticker, idxengine)
data = data.set_index('Date')
data.loc[date]
print(data.loc[date])
except KeyError as ke:
print("Data not found, insert new date data" ticker str(date))
更新以簡化我希望看到的最終結果
假設我有 dataA 和 dataB
dataA = [['2022-02-01', 123], ['2022-02-02', 120]]
dataB = [['2022-02-01', 123], ['2022-02-03', 125]]
我希望有
dataC = [['2022-02-01', 123], ['2022-02-02', 120], ['2022-02-03', 125]]
dfC = pd.DataFrame(dataC, columns = ['date', 'price'])
print(dfC)
預期產出
name price
0 2022-02-01 123
1 2022-02-02 120
2 2022-02-02 125
我該怎么辦?
uj5u.com熱心網友回復:
您不想根據應用于index.
使“日期”成為適當的列,并撰寫適當的掩碼/條件,例如
relevant_data = data[data['date'] > pd.Timestamp.today()]
顯式條件將允許您控制您想要的內容(例如,如果您有一個具有第二精度的時間戳,但您想根據月/日精度進行匹配,那么索引==和.loc索引都將不起作用,因為您需要轉換列先到日/月/時)
關于您編輯的問題的更新:您可以將兩個資料框“合并”為一個,然后洗掉重復項(假設兩個資料框的價格資訊相等。如果不是,您將需要定義價格資訊應該優先的邏輯)。
dfa = pd.DataFrame(dataA, columns=['date', 'price'])
dfb = pd.DataFrame(dataB, columns=['date', 'price'])
pd.concat([dfa, dfb]).drop_duplicates()
帶輸出
date price
0 2022-02-01 123
1 2022-02-02 120
1 2022-02-03 125
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424788.html
下一篇:用dict映射df陣列列
