【发布时间】:2014-03-28 14:07:00
【问题描述】:
我的问题很简单。我有来自 twitter 的时间戳数据。每行是一个用户,每一列给出用户最后一次推特。
time_0 time_1 time_2 time_3
21/03/2014 16:17 21/03/2014 15:40 21/03/2014 14:55 21/03/2014 12:50
21/03/2014 16:29 21/03/2014 16:26 21/03/2014 16:23 21/03/2014 16:21
04/07/2012 13:43 04/07/2012 13:37 04/07/2012 13:34 04/07/2012 13:29
19/03/2014 01:41 18/03/2014 01:19 17/03/2014 00:50 05/03/2014 22:30
我想做的是获得时差。对于每一列,我想将日期和时间替换为自上次发布以来的时间。例如,如果我的第一篇文章发生在晚上 8 点,而我的第二篇文章发生在 8 点 45 分,我想在我的第一列中获得“45 分钟”。理想情况下,我的输出是这样的(差值以秒计算)
time_0 time_1 time_2 time_3
2220 2700 7500 43860
180 180 120 0
360 180 300 300
87720 88140 -4138800 5794500
60 0 0 0
74340 1800 0 540
我是这样做的:
df = pandas.read_csv("testtimedelta.csv",header=0,parse_dates=column_names)
df=df.dropna()#get rid of not complete rows
column_names=[]
for i in range(100):
column_names.append('time_'+str(i))
deltadatas=df[column_names]
for i in range(len(column_names)-1):
deltadatas[column_names[i]]=deltadatas[column_names[i]]-deltadatas[column_names[i+1]]/ np.timedelta64(1,'s')
这似乎是对的,除了某些单元格之外,它返回的结果与输入无关,例如 400 万秒,它应该是 100 万秒。有时它甚至会返回否定结果,正如您在上面的输出示例中所见。
有人能解释发生了什么吗?建议一个更好的方法来做到这一点?
我使用的是 numpy 1.8.0 版和 pandas 0.13.0 版
编辑:一个错误的例子。
state followers friends tweets_number time_0 source_0 time_1 source_1 time_2 source_2 time_3
Bot 3890 2222 1211 19/03/2014 01:41 twitterfeed 18/03/2014 01:19 twitterfeed 17/03/2014 00:50 twitterfeed 05/03/2014 22:30
在这个例子中,time2-time3 会给我 -47 天,这是不可能的,如果我按照@Jeff 下面的建议进行操作,还是 47 天。
非常感谢您的帮助!
【问题讨论】:
-
您的代码示例不完整,因为
column_names和pd(=pandas.io.parsers?) 都没有定义。 -
请发布 pandas/numpy 的版本。您至少需要使用 numpy 1.7.1(numpy 1.6 完全有问题)
-
感谢您的指出,我马上更改。
-
好的,我更改了代码并添加了我正在使用的库的版本:numpy 为 1.8.0,pandas 为 0.13.0。再次感谢。
标签: python datetime numpy pandas timedelta