使用Python Pandas减去列中的last和first元素

时间:2014-10-22 18:43:34

标签: python pandas

我有一个这样的数据框:

A B C Date
2 3 6 03/19/2012 2:33:34.270103 PM
4 8 2 03/19/2012 2:33:34.270308 PM
...
6 2 0 03/19/2012 2:34:04.611729 PM

所以我需要计算“日期”列中最后一个元素和第一个元素之间的时差。

我需要以秒为单位的时差
(10/21/2014 2:34:04.611729 PM) - (03/19/2012 2:33:34.270103 PM) =  ANSWER to print out

此外,我的日期格式如上所示。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先使用Date方法将to_datetime系列转换为日期时间,然后从那里进行简单的计算。

In [24]: df = pd.read_csv("test.csv")

In [25]: df['Date'] = pd.to_datetime(df['Date'])

In [26]: delta = df['Date'].iat[-1] - df['Date'].iat[0]

In [27]: delta
Out[27]: numpy.timedelta64(30300000000,'ns')

In [28]: delta / np.timedelta64(1, 's')
Out[28]: 30.300000000000001

第28行是将结果“标准化”为秒,因为初始结果是以纳秒为单位。

修改

基于您上传的CSV,问题在于您的日期格式不易转换为日期时间。您需要在转换前截断前两个和最后一个字符。以下代码可以正常工作并提供正确的目标值。

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: df = pd.read_csv("dummy.csv")

In [4]: str_ = lambda x:x[2:-1]

In [5]: df["Timestamp"] = df["Timestamp"].map(str_)

In [6]: df["Timestamp"] = pd.to_datetime(df["Timestamp"])

In [7]: delta_ = df["Timestamp"].iat[-1] - df["Timestamp"].iat[0]

In [8]: delta_
Out[8]: numpy.timedelta64(36981327000,'ns')

In [9]: delta_ / np.timedelta64(1, "s")
Out[9]: 36.981327

如果有效,请告知我们。