【问题标题】:Data Manipulation with Python pandas使用 Python pandas 进行数据操作
【发布时间】:2017-12-18 08:55:20
【问题描述】:

我在处理此表时遇到问题:

date            time         V_1    I_1      V_2    I_2     Temp
07.07.2017  12:36:27.801    0.000   0.532   0.001   1.289   25.655
07.07.2017  12:36:27.802    0.000   0.486   0.001   1.273   25.655
07.07.2017  12:36:27.803    0.000   0.482   0.001   1.322   25.655
07.07.2017  12:36:27.804    0.000   0.435   0.001   1.311   25.655

我需要每行之间的时间差(802-801 = 1ms),但我找不到任何解决方案来处理这个没有循环。 有没有更pythonic的方式?

【问题讨论】:

    标签: python pandas datetime time


    【解决方案1】:

    将to_datetime 与diff 一起使用,然后得到total_seconds 和1000 的多个ms:

    df['diff'] = pd.to_datetime(df['date'] + ' ' + df['time']).diff().dt.total_seconds() * 1000
    print (df)
             date          time  V_1    I_1    V_2    I_2    Temp  diff
    0  07.07.2017  12:36:27.801  0.0  0.532  0.001  1.289  25.655   NaN
    1  07.07.2017  12:36:27.802  0.0  0.486  0.001  1.273  25.655   1.0
    2  07.07.2017  12:36:27.803  0.0  0.482  0.001  1.322  25.655   1.0
    3  07.07.2017  12:36:27.804  0.0  0.435  0.001  1.311  25.655   1.0
    

    若要将第一个值与列进行比较,请使用 sub 和 iat 选择列的第一个值:

    df['diff'] = pd.to_datetime(df['date'] + ' ' + df['time'])
    df['diff'] =  df['diff'].sub(df['diff'].iat[0]).dt.total_seconds() * 1000
    print (df)
             date          time  V_1    I_1    V_2    I_2    Temp  diff
    0  07.07.2017  12:36:27.801  0.0  0.532  0.001  1.289  25.655   0.0
    1  07.07.2017  12:36:27.802  0.0  0.486  0.001  1.273  25.655   1.0
    2  07.07.2017  12:36:27.803  0.0  0.482  0.001  1.322  25.655   2.0
    3  07.07.2017  12:36:27.804  0.0  0.435  0.001  1.311  25.655   3.0
    

    【讨论】:

    • 谢谢,它有效。不幸的是,它非常非常缓慢。 117540 行需要 150 秒。有什么加快速度的建议吗?
    • 哦,我忘记了:如何计算第一行到当前行的时间差? diff() 似乎没有一个有效的参数
    • diff 非常快,我尝试了一些 numpy 解决方案,但都比较慢。我为与列的差异第一个值添加了解决方案。
    猜你喜欢
    • 2018-05-04
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 2014-07-20
    • 2016-09-23
    • 2020-12-09
    相关资源
    最近更新 更多