![](/img/trans.png)
[英]Plot date and time (x axis) versus a value (y axis) using data from txt file (Python)
[英]How to plot date and time in X axis against Y value (Python)
数据
2018.05.01,01:15,1.206870,1.206920,1.206870,1.206920,0
2018.05.01,01:16,1.206910,1.206910,1.206810,1.206820,0
码
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
data1 = pd.read_csv('DAT_MT_EURUSD_M1_201805.csv')
date, time, closep, highp, openp = np.loadtxt(data1,
delimiter=',',
unpack = True,
dtype=float,
converters ={0: bytespdate2num('%Y%m%d%H:%M')})
最后有一个错误
ValueError:时间数据u'2018.05.01'与格式'%Y%m%d%H:%M'不匹配
看来我必须编写一个转换器函数以适合正确的日期格式,但我不知道如何。
请提出建议。
只需将格式更改为%Y.%m.%d
,因为它们之间缺少点。
如果没有,您也可以尝试使用dateutil
为您解析大多数日期格式:
import dateutil
dateutil.parser.parse(my_date_str)
您的日期和时间用逗号分隔,您正在使用逗号分隔,因此您得到的结果不正确。 您应该预先格式化文件以删除第一个逗号:
data = []
with open('test.txt') as f:
for line in f:
data.append(line.replace(',', ' ', 1))
with open('test.txt', 'w') as outf:
outf.write(''.join(data))
# 2018.05.01 01:15,1.206870,1.206920,1.206870,1.206920,0
# 2018.05.01 01:16,1.206910,1.206910,1.206810,1.206820,0
然后可以使用熊猫(您已经在使用)轻松地将其解析为某个时间:
df = pd.read_csv('test.txt', header=None)
pd.to_datetime(df[0])
0 2018-05-01 01:15:00
1 2018-05-01 01:16:00
Name: 0, dtype: datetime64[ns]
您可以直接要求pd.read_csv()
使用parse_date
关键字参数来解析日期和时间:
import pandas as pd
import matplotlib.pyplot as plt
# Read data AND parse time stamps (date + time) given by columns 0 and 1
data = pd.read_csv('data.csv', sep=',', header=None, parse_dates=[0, 1])
# Plot and save figure
plt.plot(data[[1]], data[[2, 3, 4, 5]])
plt.savefig('pandas_plot.png')
给定您提供的两行数据(我存储在data.csv
文件中),此脚本将产生下图(实际上您可以在两个不同的日期看到采样的数据):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.