Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 减去行会得到错误的结果_Python_Pandas_Dataframe - Fatal编程技术网

Python 减去行会得到错误的结果

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

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
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()