从python数据帧中的前几行中减去列的行

从python数据帧中的前几行中减去列的行,python,mysql,pandas,data-manipulation,Python,Mysql,Pandas,Data Manipulation,我有一个.dat文件,它在一列中包含数千行(比如,该列是time,t),现在我想找到列中行之间的间隔,这意味着从第一行中减去第二行的值,依此类推。。(找到dt)。然后,我希望用这些间隔值创建一个新列,并将其与原始列进行对比。如果python以外的任何其他语言在这种情况下有帮助,我也非常感谢他们的建议。 我已经为此编写了一个伪python代码: import pandas as pd import numpy as np from sys import argv from pylab im

我有一个.dat文件,它在一列中包含数千行(比如,该列是time,t),现在我想找到列中行之间的间隔,这意味着从第一行中减去第二行的值,依此类推。。(找到dt)。然后,我希望用这些间隔值创建一个新列,并将其与原始列进行对比。如果python以外的任何其他语言在这种情况下有帮助,我也非常感谢他们的建议。
我已经为此编写了一个伪python代码:

    import pandas as pd
import numpy as np
from sys import argv
from pylab import *


import csv



script, filename = argv


# read flash.dat to a list of lists
datContent = [i.strip().split() for i in open("./flash.dat").readlines()]

# write it as a new CSV file
with open("./flash.dat", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(datContent)


columns_to_keep = ['#time']
dataframe = pd.read_csv("./flash.csv", usecols=columns_to_keep)


df = pd.DataFrame({"#time"})
df["#time"] = df["#time"]  + [pd.Timedelta(minutes=m) for m in np.random.choice(a=range(60), size=df.shape[0])]
df["value"] = np.random.normal(size=df.shape[0])

df["prev_time"] = [np.nan] + df.iloc[:-1]["#time"].tolist()
df["time_delta"] = df.time - df.prev_time
df

pd.set_option('display.height', 1000)
pd.set_option('display.max_rows', 1000)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)

dataframe.plot(x='#time', y='time_delta', style='r')

print dataframe

show()
更新了我的代码,我也在共享我正在处理的.dat文件。
执行涉及不同行的值的操作的一种简单方法是将所需的值复制到同一行,然后应用简单的行操作

例如,在您的示例中,我们有一个数据帧,其中有一个
time
列和一些其他数据,如下所示:

import pandas as pd
import numpy as np 

df = pd.DataFrame({"time":  pd.date_range("24 sept 2016",  periods=5*24, freq="1h")})
df["time"] = df["time"]  + [pd.Timedelta(minutes=m) for m in np.random.choice(a=range(60), size=df.shape[0])]
df["value"] = np.random.normal(size=df.shape[0])

如果要从上一行(或下一行或其他行)计算时间增量,只需从中复制值,然后执行减法:

df["prev_time"] = [np.nan] + df.iloc[:-1]["time"].tolist()
df["time_delta"] = df.time - df.prev_time
df

执行涉及不同行的值的操作的一种简单方法是将所需的值复制到同一行,然后应用简单的行操作

例如,在您的示例中,我们有一个数据帧,其中有一个
time
列和一些其他数据,如下所示:

import pandas as pd
import numpy as np 

df = pd.DataFrame({"time":  pd.date_range("24 sept 2016",  periods=5*24, freq="1h")})
df["time"] = df["time"]  + [pd.Timedelta(minutes=m) for m in np.random.choice(a=range(60), size=df.shape[0])]
df["value"] = np.random.normal(size=df.shape[0])

如果要从上一行(或下一行或其他行)计算时间增量,只需从中复制值,然后执行减法:

df["prev_time"] = [np.nan] + df.iloc[:-1]["time"].tolist()
df["time_delta"] = df.time - df.prev_time
df

Pandas shift函数应该可以。Pandas shift函数应该可以。我已经根据您的建议更新了我的代码,但是我有一些错误,因为我的文件没有以分钟为单位保存数据。我共享了我正在处理的原始dat文件,请您花点时间查看一下,并将您的代码指定更新到my file.Hi。我看了你的文件,据我所知,它已经包含了时间增量,而不是日期,可能表示为毫秒或纳秒?同样的逻辑也适用,一旦您在数据帧中加载了文件,比如在变量
df
中,您就可以使用类似
df[“time”]=df.time.apply(lambda ms:pd.Timedelta(millizes=ms))
的内容来转换列
time
(根据列的含义调整毫秒)。在此之后,我发布的代码应该可以正常工作:时间戳的差异或时间增量的差异都会产生时间增量。我已经根据您的建议更新了我的代码,但是我有一些错误,因为我的文件没有以分钟为单位保存数据等。我共享了我正在处理的原始dat文件,请您花点时间查看一下,并将您的代码指定更新到my file.Hi。我看了你的文件,据我所知,它已经包含了时间增量,而不是日期,可能表示为毫秒或纳秒?同样的逻辑也适用,一旦您在数据帧中加载了文件,比如在变量
df
中,您就可以使用类似
df[“time”]=df.time.apply(lambda ms:pd.Timedelta(millizes=ms))
的内容来转换列
time
(根据列的含义调整毫秒)。在此之后,我发布的代码应该可以正常工作:时间戳的差异或时间增量的差异都会产生时间增量。