使用Python Pandas减去一列中的最后一个和第一个元素

3

I have a dataframe like this:

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个回答

3

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

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文件,问题在于您的日期格式无法直接转换为datetime格式。在转换前需要删除前两个字符和最后一个字符。下面的代码可以正常工作并提供正确的目标值。

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

请告诉我们这是否有效。

1
@mane 你首先需要将其转换为日期时间,你尝试过 pd.to_datetime(d['Timestamp']) 吗? - EdChum
1
你说过你执行了 df['Timestamp'] = pd.to_datetime(df['Timestamp']),但是根据你后面的陈述,显示你的数据框不是 df 而是 d。你确定你转换了正确的数据框吗?如果是的话,很可能你的日期没有从字符串转换过来。当你试图从一个字符串中减去另一个字符串时,就会出现这个错误,显然。 - WGS
1
FYI,iat并没有被弃用。 - Jeff
1
这可能有点激进,但你能否在线上传你的CSV/文本文件并在帖子中发布链接?我可以提供几种方法,但我必须看到Pandas如何精确读取数据,以便提供解决方案。 - WGS
1
我想我现在看到问题了。格式与您提供的远不相同,因为它显示为 ="10/22/2014 5:22:54.408590 PM"。那绝对是一个字符串,在转换为日期时间格式之前需要进行清理。请稍等片刻,我来修复它。 - WGS
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接