Python 数据帧和子图中的日期错误

Python 数据帧和子图中的日期错误,python,pandas,csv,datetime,dataframe,Python,Pandas,Csv,Datetime,Dataframe,我正在尝试在csv文件中绘制数据。当前,如果我正在转换,我的日期也不会正确显示在绘图中。如何更改它以显示Y-m-d定义的正确dat格式?第二个问题是,我目前正在一个绘图中绘制所有dat,但希望每个值组都有一个子绘图 我的代码如下所示: import pandas as pd import matplotlib.pyplot as plt csv_loader = pd.read_csv('C:/Test.csv', encoding='cp1252', sep=';', index_col=0

我正在尝试在csv文件中绘制数据。当前,如果我正在转换,我的日期也不会正确显示在绘图中。如何更改它以显示Y-m-d定义的正确dat格式?第二个问题是,我目前正在一个绘图中绘制所有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文件如下所示:

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)

你把日期分析错了<代码>%Y-%m-%d“适用于2017-12-11(即2017年12月12日)等日期。您的日期格式为
“%Y%m%d”
,没有连字符。

您的日期解析错误<代码>%Y-%m-%d“适用于2017-12-11(即2017年12月12日)等日期。您的日期的格式为
“%Y%m%d”
,不带连字符。

您只需告诉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
,请参见相关内容:

现在给出一个情节:


您只需告诉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
,请参见相关内容:

现在给出一个情节:


非常感谢,不知何故,x轴仍然没有显示正确的日期,但显示的格式如上图所示。我希望x轴上显示的格式为“03-01-2008”。我还想知道如何在一个子地块中显示每个Valuegroup?请参阅相关内容,我将更新我的代码和绘图我已经更新了我的答案,如果您需要有关绘图本身的进一步帮助,您应该接受我的答案并问一个新问题,因为我不是matplotlib专家非常感谢,不知何故,x轴仍然没有显示正确的日期,但格式如上图所示。我希望x轴上显示的格式为“03-01-2008”。我还想知道如何在一个子图中显示每个Valuegroup?请参阅相关内容,我将更新我的代码和绘图我已更新了我的答案,如果您需要有关绘图本身的进一步帮助,您应该接受我的答案并问一个新问题,因为我不是matplotlib专家