用Pandas绘制真实时间序列的简单方法

2024-05-17 19:43:16 发布

您现在位置:Python中文网/ 问答频道 /正文

从以下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'

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


Tags: csv数据方法pandasdata时间货币绘制
1条回答
网友
1楼 · 发布于 2024-05-17 19:43:16

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

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)

The Plot

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

相关问题 更多 >