绘制包含时间戳和常量值.log文件

Plotting .log file containing timestamp and constant value

提问人:Saradindu Samanta 提问时间:8/8/2023 最后编辑:Jan_BSaradindu Samanta 更新时间:8/8/2023 访问量:60

问:

我有一个文本文件,其中包含两列的时间戳和值。 数据如下所示:

00:00:08    3.78E-7
00:02:10    3.78E-7
00:05:00    3.78E-7
00:06:00    3.78E-7
...

由于值没有变化,我想绘制时间。图表应该是一条直线。

我尝试了以下方法:

import pandas as pd
from collections import defaultdict
import matplotlib.pyplot as plt
from matplotlib import interactive


def main():
with open(r'C:\Users\sarad\leybold\230623.log','r') as line: 
 table = defaultdict(dict)
 for line in line:
   if line:
     entry = line.strip()
     if ':' in entry:
         t = entry
     for item in t:
          t1,t2=t.split(" ")
          table[t].update({t1:float(t2)})
 df=pd.DataFrame(table).T
 print(df)
 df.plot()
 plt.show()  
main()

当我打印我的 DataFrame 时,它看起来像这样:

15:19:37      15:20:07      15:20:37  ...      23:58:58      23:59:28      23:59:58
15:19:37 7.8E-7  7.800000e-07           NaN           NaN  ...           NaN           NaN           NaN
15:20:07 7.8E-7           NaN  7.800000e-07           NaN  ...           NaN           NaN           NaN
15:20:37 7.8E-7           NaN           NaN  7.800000e-07  ...           NaN           NaN           NaN
15:21:07 7.8E-7           NaN           NaN           NaN  ...           NaN           NaN           NaN
15:21:37 7.8E-7           NaN           NaN           NaN  ...           NaN           NaN           NaN
...                       ...           ...           ...  ...           ...           ...           ...
23:57:58 9.4E-7           NaN           NaN           NaN  ...           NaN           NaN           NaN
23:58:28 9.4E-7           NaN           NaN           NaN  ...           NaN           NaN           NaN
23:58:58 9.4E-7           NaN           NaN           NaN  ...  9.400000e-07           NaN           NaN
23:59:28 9.4E-7           NaN           NaN           NaN  ...           NaN  9.400000e-07           NaN

这不可能策划!

如何导入.log文件并编辑 DataFrame 以便绘制数据?

Python DataFrame Matplotlib 绘图 序列

评论


答:

1赞 Jan_B 8/8/2023 #1

由于您的数据似乎是 csv 格式,因此您可以使用 pandas 的功能,其中 是时间戳和值之间的任何字符序列(在这种情况下,它似乎是四个空格)。由于分隔符不是单个字符(如 for tab),因此您还需要设置 以避免在控制台中出现警告。pd.read_csv(myfile, sep=delimiter)delimiter\tengine='python'

因此,请尝试:

import pandas as pd

def plot_log():
    # import .log file directly into a pandas dataframe and name columns
    df = pd.read_csv(r'C:\Users\sarad\leybold\230623.log', sep='    ', engine='python', names=['time', 'value'], header=None)
    df.time = pd.to_datetime(df.time, format='%H:%M:%S',).dt.time  # cast column of timestamps as datetime object
    df.value = df.value.astype(float)  # cast column of values as float
    # set the timestamp as the index and therefore as the x-axis and display datapoints on line
    df.set_index('time').plot(style='o-')
    plt.show()  # display the plot

if __name__ == '__main__':
    plot_log()

评论

0赞 Jan_B 8/8/2023
@SaradinduSamanta 您能否注意我帖子的最后一句话,并澄清您要加载的数据是否存在于制表符分隔的 csv 中(即具有多行文本的文本文件,其中列由制表符分隔)。如果是这样,您可以通过研究熊猫的read_csv功能来省去很多麻烦。
0赞 Saradindu Samanta 8/8/2023
谢谢。以下错误即将到来。TypeError:没有要绘制的数值数据
0赞 Saradindu Samanta 8/8/2023
我正在提供一部分数据......也许会更清楚.我无法在第一篇文章中正确提供数据。
0赞 Saradindu Samanta 8/8/2023
15:19:37 7.8E-7 15:20:07 7.8E-7 15:20:37 7.8E-7 15:21:07 7.8E-7 15:21:37 7.8E-7 15:22:07 7.8E-7 15:22:37 7.8E-7 15:23:07 7.8E-7 15:23:38 7.8E-7 15:24:08 7.8E-7 15:24:38 7.8E-7 15:25:08 7.8E-7
0赞 Saradindu Samanta 8/8/2023
它就像 X 轴和 Y 轴.....I xaxis 有时间(带 delimeter 的数据)然后是一个空间,然后是压力......