【问题标题】:What's the fastest way to compare datetime in pandas?在熊猫中比较日期时间的最快方法是什么?
【发布时间】:2015-06-15 14:09:11
【问题描述】:

我有两个不同行数的大 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 进行比较,并进一步运行一些基于树的模型。我是一个新手,几乎没有编码背景!如果这是一种“肮脏”的方式,请原谅我。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: python python-3.x numpy pandas datetime64


    【解决方案1】:

    如果您在pdata 上将set_index 调用到date_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
    

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 1970-01-01
      • 2018-11-03
      • 2020-10-02
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2018-08-26
      相关资源
      最近更新 更多