【问题标题】:ploting year-month-date vs weight绘制年月日与体重
【发布时间】:2021-08-24 04:55:11
【问题描述】:

链接到“Stackoverflow question” 我是 Python 新手,并尝试了链接中的程序,但是,我收到以下错误,我在这里遗漏了什么吗?你能指出我吗?

..................

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({
          'weight':[1, 2, 3, 4],
          'date':['2011-05-01', '2013-10-10', '2015-12-17', '2017-10-29']
          })
df['date'] = pd.to_datetime(df['date'])

df1 = df.groupby(df['date'].dt.to_period('M')).sum()

df1 = df1.resample('M').asfreq().fillna(0)

plt.figure();

df1.plot(x='date', y='weight', kind='bar')


.......................................... Traceback (most recent call last):

File "/PycharmProjects/hellopython/hello_world", line 24, in

df1.plot(x='date', y='weight', kind='bar')
File "\PycharmProjects\hellopython\venv\lib\site-

packages\pandas\plotting_core.py", line 920, in call

elif not isinstance(data[x], ABCSeries):
File "\PycharmProjects\hellopython\venv\lib\site-packages\pandas\core\frame.py", line 3024, in getitem

indexer = self.columns.get_loc(key)
File "\PycharmProjects\hellopython\venv\lib\site-

packages\pandas\core\indexes\base.py", line 3082, in get_loc

raise KeyError(key) from err
KeyError: 'date'

【问题讨论】:

    标签: python pandas datetime matplotlib


    【解决方案1】:

    两种选择

    选项 1

    由于date 是索引,所以我们不需要传递 x 和 y 轴来绘图。感谢@Nk03 提出这个选项。

    在现有代码下修改

    df1.plot(kind='bar')
    

    代码

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.DataFrame({
              'weight':[1, 2, 3, 4],
              'date':['2011-05-01', '2013-10-10', '2015-12-17', '2017-10-29']
              })
    df['date'] = pd.to_datetime(df['date'])
    
    df1 = df.groupby(df['date'].dt.to_period('M')).sum()
    
    df1 = df1.resample('M').asfreq().fillna(0)
    
    plt.figure();
    
    df1.plot(kind='bar')
    

    选项 2 - 重置索引

    在现有代码中添加以下行

    df1 = df1.reset_index()
    

    完整代码

    import matplotlib.pyplot as plt
    import pandas as pd
    
    df = pd.DataFrame({
              'weight':[1, 2, 3, 4],
              'date':['2011-05-01', '2013-10-10', '2015-12-17', '2017-10-29']
              })
    df['date'] = pd.to_datetime(df['date'])
    
    df1 = df.groupby(df['date'].dt.to_period('M')).sum()
    
    df1 = df1.resample('M').asfreq().fillna(0)
    df1 = df1.reset_index()
    
    plt.figure();
    
    df1.plot(x='date', y='weight', kind='bar')
    

    【讨论】:

    • 嗨,非常感谢。它正在工作但是我只是以这种方式尝试过,就像 Option2 df1.plot(x='weight', y='date', kind='bar') 改变了 x 和 y 并且它给出了编译器错误为“TypeError( “没有要绘制的数值数据”)类型错误:没有要绘制的数值数据”。这里可以更改 x 和 y 还是不应该更改?你也能纠正我吗?提前致谢。
    • 如果你想在 y 轴上绘制非数字类型,比如日期,那么请visit
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多