从以下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'
阅读日期和值并绘制时间序列的简单方法是什么?我认为这是一个常见的问题,必须有一个三线解决方案。
答案 0 :(得分:4)
您需要将日期列转换为正确的格式:
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
方法生成的。因此月份名称是德语。