我有一个.dat文件,它在一列中需要数千行(比如,列是时间,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文件。 https://www.dropbox.com/s/w4jbxmln9e83355/flash.dat?dl=0
答案 0 :(得分:1)
执行涉及来自不同行的值的操作的一种简单方法是简单地将所需值复制到同一行,然后应用简单的逐行操作。
例如,在您的示例中,我们的数据框包含一个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