将csv中的日期/时间和数据输入matplotlib

时间:2017-11-09 22:44:28

标签: python csv matplotlib

我的最终目标是通过matplotlib从csv日志文件中获取日期/时间和临时数据,数据格式如下:

date/time,temp1,temp2,temp3,temp4,ect
8/25/2017 14:55:49,20.851,20.953,21.025,21.055,ect
8/25/2017 14:56:49,20.799,20.944,20.99,21.029,ect

我试图将我的数据集装入这个例子作为起点: https://matplotlib.org/gallery/api/date.html

由于我还熟悉matplotlib,我不确定首选输入是什么,上面的例子使用了数组,所以如果这是最好的选择,那么我的问题是什么' s将这些数据转换为格式正确的数组的有效方法?这是我的代码,我读到一行数据,并弄清楚如何解析日期/时间并放入日期时间容器:

import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.cbook as cbook

f = open(r'Sample Data.csv')

#Burn off top crap of logfile
for x in range(38):
    f.readline()

#Headers
pantsHeaders = f.readline()
#Start of data
pants1 = f.readline().replace('\x00','').strip('\n').split(',')


pantsDate = datetime.date(int(pants1[0].split(' ')[0].split('/')[2]),int(pants1[0].split(' ')[0].split('/')[0]),int(pants1[0].split(' ')[0].split('/')[1]))
pantsTime = datetime.time(int(pants1[0].split(' ')[1].split(':')[0]),int(pants1[0].split(' ')[1].split(':')[1]),int(pants1[0].split(' ')[1].split(':')[2]))

date = datetime.datetime.combine(pantsDate, pantsTime)

必须有一个更好的方法来解析日期/时间信息,而不是我这样做的方式,并且我愿意采用任何方法来获得matplotlib友好格式(数组或其他方式)

2 个答案:

答案 0 :(得分:1)

Pandas擅长处理日期时间格式,并且与Matplotlib很好地集成。

例如,使用您的示例数据:

datetime,temp1,temp2,temp3,temp4
8/25/2017 14:55:49,20.851,20.953,21.025,21.055
8/25/2017 14:56:49,20.799,20.944,20.99,21.029

如果保存为example.csv,您可以执行以下操作:

import pandas as pd
df = pd.read_csv("example.csv", parse_dates=['datetime'], index_col="datetime")
df.plot()

time series plot

答案 1 :(得分:-1)

分割CSV的日期时间字符串后,可以使用strptime,如下例所示:

from datetime import datetime
parsed_value = '8/25/2017 14:55:49'
date = datetime.strptime(parsed_value, "%m/%d/%Y %H:%M:%S")
print(type(date))
print(date)

返回:

class 'datetime.datetime'>
2017-08-25 14:55:49

Process finished with exit code 0