我的最终目标是通过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友好格式(数组或其他方式)
答案 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()
答案 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