【问题标题】:Simple way to plot time series with real dates using pandas使用 pandas 绘制具有真实日期的时间序列的简单方法
【发布时间】:2016-12-14 17:07:35
【问题描述】:

从以下 CSV 数据开始,加载到 pandas 数据框中...

Buchung;Betrag;Saldo
27.06.2016;-1.000,00;42.374,95
02.06.2016;500,00;43.374,95
01.06.2016;-1.000,00;42.874,95
13.05.2016;-500,00;43.874,95
02.05.2016;500,00;44.374,95
04.04.2016;500,00;43.874,95
02.03.2016;500,00;43.374,95
10.02.2016;1.000,00;42.874,95
02.02.2016;500,00;41.874,95
01.02.2016;1.000,00;41.374,95
04.01.2016;300,00;40.374,95
30.12.2015;234,54;40.074,95
02.12.2015;300,00;39.840,41
02.11.2015;300,00;39.540,41
08.10.2015;1.000,00;39.240,41
02.10.2015;300,00;38.240,41
02.09.2015;300,00;37.940,41
31.08.2015;2.000,00;37.640,41

...我想要一种直观的方式来绘制由“Buchung”列中的日期和“Saldo”列中的货币值给出的时间序列。

我试过了

seaborn.tsplot(data=data, time="Buchung", value="Saldo")

产生

ValueError: could not convert string to float: '31.08.2015'

什么是读取日期和值并绘制时间序列的简单方法?我认为这是一个常见的问题,必须有一个三行解决方案。

【问题讨论】:

  • 不要将 PNG 用于数据和代码。稍加努力,然后输入。

标签: python pandas plot time-series seaborn


【解决方案1】:

您需要将日期列转换为正确的格式:

data['Buchung'] = pd.to_datetime(data['Buchung'], format='%d.%m.%Y')

现在你的情节可以工作了。


虽然你没有问,但我想你也会遇到类似的问题,因为你的数字('Betrag''Saldo')似乎也是字符串。所以我建议你在绘图之前将它们转换为数字。以下是您可以通过简单的字符串操作来做到这一点的方法:

data["Saldo"] = data["Saldo"].str.replace('.', '').str.replace(',', '.')
data["Betrag"] = data["Betrag"].str.replace('.', '').str.replace(',', '.')

或者设置locale:

import locale
# The data appears to be in a European format, German locale might
# fit. Try this on Windows machine:
locale.setlocale(locale.LC_ALL, 'de')
data['Betrag'] = data['Betrag'].apply(locale.atof)
data['Saldo'] = data['Saldo'].apply(locale.atof)
# This will reset the locale to system default
locale.setlocale(locale.LC_ALL, '')

在 Ubuntu 机器上,关注this answer。如果上述代码在 Windows 机器上不起作用,请尝试 locale.locale_alias 列出所有可用的语言环境并从中选择名称。


输出

使用matplotlib,因为我无法在我正在使用的机器上安装 Seaborn。

from matplotlib import pyplot as plt

plt.plot(data['Buchung'], data['Saldo'], '-')
_ = plt.xticks(rotation=45)

注意:这是使用locale 方法生成的。因此月份名称是德语。

【讨论】:

  • 还没有。日期转换有效,但如果我正确解释错误消息,“Saldo”下的货币值也需要转换。
  • 正在处理它,请参阅编辑。不客气!
  • docs.python.org/3.5/library/locale.html#locale.atof 你需要locale.atof 在里面申请。很抱歉错过了。
  • 你的语言环境是什么?
  • 输入 [2]: locale.getlocale() 输出[2]: ('en_US', 'UTF-8')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2016-11-12
  • 2019-05-14
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多