Python 减去行会得到错误的结果
My pandas dataframe由一列“timeStamp”组成,其元素的类型为datetime.datetime。我试图获得此列中两个连续行之间的差值,以获得以秒为单位的时间。我使用下面的代码Python 减去行会得到错误的结果,python,pandas,dataframe,Python,Pandas,Dataframe,My pandas dataframe由一列“timeStamp”组成,其元素的类型为datetime.datetime。我试图获得此列中两个连续行之间的差值,以获得以秒为单位的时间。我使用下面的代码 df["Time"] = df["timeStamp"].diff(0).dt.total_seconds() 一般来说,它工作得很好,但是,由于这个操作,在很多情况下,即使不是这样,我也会得到0.0 导致0.0的示例值: import pandas as pd import datetime
df["Time"] = df["timeStamp"].diff(0).dt.total_seconds()
一般来说,它工作得很好,但是,由于这个操作,在很多情况下,即使不是这样,我也会得到0.0
导致0.0的示例值:
import pandas as pd
import datetime
import numpy as np
df = pd.DataFrame({'S.No.': [1, 2, 3, 4], 'ABC': [datetime.datetime(2019,2,25,11,49,50), datetime.datetime(2019,2,25,11,50,0),datetime.datetime(2019,2,25,11,50,7),datetime.datetime(2019,2,25,11,50,12)]})
df["Time"] = df["ABC"].diff(0).dt.seconds
print df
注意:使用python2.7
df["Time"] = df["timeStamp"].diff().dt.total_seconds()
相反
中的参数指定要与之计算差值的行上方的行数。现在,你用0填充它,所以你从它自身减去一个值,它将始终为0。如果将其保留为空,它将使用默认值1,因此与上面的1行的差异将被忽略。尝试以下操作:
print(df["timestamp"].diff().fillna(0).dt.seconds)
0 0
1 10
2 7
3 5
df['difference']=df["timestamp"].diff().fillna(0).dt.seconds
print(df)
timestamp difference
0 2019-02-25 11:49:50 0
1 2019-02-25 11:50:00 10
2 2019-02-25 11:50:07 7
3 2019-02-25 11:50:12 5
现在我得到的是0,而不是0,这很奇怪。您是否使用您在问题中提供的样本数据来运行它?因为我得到的是
np.nan,10.0,7.0,5.0
,完全符合预期。我现在已经在我的问题中添加了一些代码,它是否正确运行?现在我得到的是0而不是0.0。使用df[“timestamp”]=df[“timestamp”]。应用(np.datetime64)
,然后检查dtype是否转换为datetime64[ns]
那么这个代码应该可以运行了。我现在已经在我的问题中添加了一些代码,它是否可以正确运行?df[“ABC”].diff().fillna(0).dt.seconds
仍然可以运行,您在注释中添加的链接对我来说是无法访问的。问题是“diff(0)”,它应该是diff()