【问题标题】:How to draw time-series chart on time and value by using Python如何使用 Python 绘制时间和价值的时间序列图
【发布时间】:2019-08-21 13:19:57
【问题描述】:

如何使用 Python 绘制时间序列图? 由于在数据集中,时间分为年和期间(如 M1、M2 的月份)。

我正在使用matplotlib,但不知道如何分配时间。

我写的获取数据的代码: 将熊猫导入为 pd 从熊猫导入数据框 data1 = pd.read_csv('CUUR0000SA0.txt',标题 = 无) data2 = pd.read_csv('SUUR0000SA0.txt',标题 = 无) 数据 = pd.concat([data1, data2]) data.columns = ["a"] 数据 = 数据帧(数据) 打印(data.head())

但是,输出数据框只有一列。

部分数据集如下所示:

+-------------+------+--------+---------+-----------+
|  series id  | year | period |  value  | footnotes |
+-------------+------+--------+---------+-----------+
| CUUR0000SA0 | 2014 |  M12   | 234.812 |           |
| CUUR0000SA0 | 2014 |  M11   | 236.151 |           |
| CUUR0000SA0 | 2014 |  M10   | 237.433 |           |
| CUUR0000SA0 | 2014 |  M09   | 238.031 |           |
| CUUR0000SA0 | 2014 |  M08   | 237.852 |           |

图表应根据时间段使用图表来解释值的趋势。但我不知道如何先将其转换为正确的格式。

【问题讨论】:

  • 嗨,桑迪,您使用的是 pandas 还是 numpy?您将需要使用 datetime 包,但答案可能取决于您的数据的结构。
  • 哦,我是用pandas数据框来存储上面的数据的。
  • 从这个问题中我不清楚您希望生成的图表是什么样子。你都尝试了些什么?例如df.plot() 能得到你需要的东西吗? df.sort_values(['year', 'period']).plot(x='period', y='value') 怎么样?
  • 问题是我想显示基于年份和期间的价值趋势。但我不知道如何将这一列数据集转换为具有多列的数据框。

标签: python pandas matplotlib time-series


【解决方案1】:

这些是获得解决方案的步骤:

  1. 将周期值转换为数字
  2. 添加一列,其中值是年份和期间的组合
  3. 绘制时间序列

这是代码:

import pandas as pd
from datetime import datetime

df = {0: {"series id":"CUUR0000SA0", "year":2014, "period":"M12", "value":234.812},
        1: {"series id":"CUUR0000SA0", "year":2014, "period":"M11", "value":236.151},
       2: {"series id":"CUUR0000SA0", "year":2014, "period":"M10", "value":237.433},
       3: {"series id":"CUUR0000SA0", "year":2014, "period":"M09", "value":238.031},
       4: {"series id":"CUUR0000SA0", "year":2014, "period":"M08", "value":237.852},
       }

d = {'M01':1,
     'M02':2,
     'M02':3,
     'M04':4,
     'M05':5,
     'M06':6,
     'M07':7,
     'M08':8,
     'M09':9,
    'M10':10,
    'M11':11,
    'M12':12,}

df = pd.DataFrame.from_dict(df, orient="index")
df.period = df.period.map(d)

df['date'] = pd.to_datetime(df.year.astype(str) + '/' + df.period.astype(str) + '/01')

df.plot(x='date', y='value')

【讨论】:

  • 我意识到文本文件中的表格实际上只有一列。也就是说我必须把它分成几列来存储在数据框中。你知道怎么做吗?
  • 请提供您的数据框示例,否则将无法理解您的问题。
猜你喜欢
  • 1970-01-01
  • 2016-05-06
  • 2018-09-20
  • 2020-03-29
  • 2010-12-08
  • 1970-01-01
  • 2018-10-22
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多