[英]Wrong Dates in Dataframe and Subplots
我正在尝试在 csv 文件中绘制我的数据。 目前我的日期在图中也没有正确显示,如果我正在转换它。 如何更改它以显示定义的 Ymd 正确的 dat 格式? 第二个问题是我目前正在一个图中绘制所有数据,但希望每个值组都有一个子图。
我的代码如下所示:
import pandas as pd
import matplotlib.pyplot as plt
csv_loader = pd.read_csv('C:/Test.csv', encoding='cp1252', sep=';', index_col=0).dropna()
csv_loader['Date'] = pd.to_datetime(csv_loader['Date'], format="%Y-%m-%d")
print(csv_loader)
fig, ax = plt.subplots()
csv_loader.groupby('Valuegroup').plot(x='Date', y='Value', ax=ax, legend=False, kind='line')
plt.grid(True)
csv 文件如下所示:
Calcgroup;Valuegroup;id;Date;Value Group1;A;1;20080103;0.1 Group1;A;1;20080104;0.3 Group1;A;1;20080107;0.5 Group1;A;1;20080108;0.9 Group1;B;1;20080103;0.5 Group1;B;1;20080104;1.3 Group1;B;1;20080107;2.0 Group1;B;1;20080108;0.15 Group1;C;1;20080103;1.9 Group1;C;1;20080104;2.1 Group1;C;1;20080107;2.9 Group1;C;1;20080108;0.45
您可以告诉 pandas 将该列解析为日期时间,它就可以正常工作:
In[151]:
import matplotlib.pyplot as plt
t="""Calcgroup;Valuegroup;id;Date;Value
Group1;A;1;20080103;0.1
Group1;A;1;20080104;0.3
Group1;A;1;20080107;0.5
Group1;A;1;20080108;0.9
Group1;B;1;20080103;0.5
Group1;B;1;20080104;1.3
Group1;B;1;20080107;2.0
Group1;B;1;20080108;0.15
Group1;C;1;20080103;1.9
Group1;C;1;20080104;2.1
Group1;C;1;20080107;2.9
Group1;C;1;20080108;0.45"""
df = pd.read_csv(io.StringIO(t), parse_dates=['Date'], sep=';', index_col=0)
df
Out[151]:
Valuegroup id Date Value
Calcgroup
Group1 A 1 2008-01-03 0.10
Group1 A 1 2008-01-04 0.30
Group1 A 1 2008-01-07 0.50
Group1 A 1 2008-01-08 0.90
Group1 B 1 2008-01-03 0.50
Group1 B 1 2008-01-04 1.30
Group1 B 1 2008-01-07 2.00
Group1 B 1 2008-01-08 0.15
Group1 C 1 2008-01-03 1.90
Group1 C 1 2008-01-04 2.10
Group1 C 1 2008-01-07 2.90
Group1 C 1 2008-01-08 0.45
fig, ax = plt.subplots()
df.groupby('Valuegroup').plot(x='Date', y='Value', ax=ax, legend=False, kind='line')
plt.grid(True)
plt.show()
结果是:
除了你的格式字符串不正确之外,它应该是:
csv_loader['Date'] = pd.to_datetime(csv_loader['Date'], format="%Y%m%d")
但是,这将不起作用,因为该列将作为int
dtype 加载,因此您需要先转换为字符串:
csv_loader['Date'] = pd.to_datetime(csv_loader['Date'].astype(str), format="%Y%m%d")
要格式化 x 轴上的日期,您可以使用matplotlib
DateFormatter
参见相关: Editing the date format of x-axis tick labels in matplotlib
from matplotlib.dates import DateFormatter
fig, ax = plt.subplots()
df.groupby('Valuegroup').plot(x='Date', y='Value', ax=ax, legend=False, kind='line')
plt.grid(True)
myFmt = DateFormatter("%d-%m-%Y")
ax.xaxis.set_minor_formatter(myFmt)
plt.show()
现在给出情节:
您解析的日期错误; "%Y-%m-%d"
适用于 2017-12-11(即 2017 年 12 月 12 日)等日期。 您的日期格式为"%Y%m%d"
,不带连字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.