簡體   English   中英

在熊貓中比較日期時間的最快方法是什么?

[英]What's the fastest way to compare datetime in pandas?

我有兩個具有不同行數的大 csv 文件,我將按如下方式導入:

tdata = pd.read_csv(tfilepath, sep=',', parse_dates=['date_1'])
print(tdata.iloc[:, [0,3]])

       TBA    date_1
0       0   2010-01-04
1       9   2010-01-05
2       0   2010-01-06    
3       8   2010-01-07
4       0   2010-01-08
5       0   2010-01-09

pdata = pd.read_csv(pfilepath, sep=',', parse_dates=['date_2'])
print(pdata.iloc[:, [0,3]])

       TBA    date_2
0       3   2011-01-04
1       5   2010-01-09
2       0   2012-02-03    
3       9   2010-03-17
4       1   2010-11-08
5       2   2010-01-05

現在我想用日期匹配的第二個數據框中的相應 TBA 替換第一個數據框中的 TBA。 默認值為 0。所以我按如下方式遍歷行:

 for i, row1 in tdata.iterrows():
     for j, row2 in pdata.iterrows():
         if row1['date_1'] == row2['date_2']:
             tdata.loc[i, 'TBA'] = row2['TBA']
             break
         else:
             tdata.loc[i, 'TBA'] = 0

問題是這需要很長時間(大約 11 分鍾)。 我想將一個 csv 與 160 個其他 csv 進行比較,並進一步運行一些基於樹的模型。 我是一個沒有編碼背景的新手! 如果這是一種“骯臟”的方式,請原諒我。 任何幫助,將不勝感激。 謝謝!

如果你調用set_indexpdatadate_2 ,那么你可以通過這個作為參數去map並稱之為對tdata['date_1']列,然后fillna

In [51]:    
tdata['TBA'] = tdata['date_1'].map(pdata.set_index('date_2')['TBA'])
tdata.fillna(0, inplace=True)
tdata

Out[51]:
   TBA      date_1
0    0  2010-01-04
1    2  2010-01-05
2    0  2010-01-06
3    0  2010-01-07
4    0  2010-01-08
5    5  2010-01-09

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM