2016-08-08 39 views
0

從以下CSV數據,加載到大熊貓的數據幀開始密謀與真正的日期時間序列...簡單的方式使用熊貓

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

請勿將PNG用於數據和代碼。稍作努力並輸入。 – Kartik

回答

3

您需要將日期列轉換成正確的格式:

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方法來製造。因此月份名稱是德文的。

+0

還沒有。日期轉換工作,但如果我正確解釋錯誤消息,還需要轉換「Saldo」下的貨幣值。 – clstaudt

+0

正在處理它,請參閱編輯。不用客氣! – Kartik

+0

https://docs.python.org/3.5/library/locale.html#locale.atof你需要'locale.atof'裏面應用。對不起,錯過了。 – Kartik