2016-09-18 72 views
1

我有一個xls文件,數據以長格式組織。我有四欄:變量名稱,國家名稱,年份和價值。Python,從長數據繪製熊貓的pivot_table

使用pandas.read_excel將Python中的數據導入後,我想繪製不同國家/地區的一個變量的時間序列。爲此,我創建了一個以寬格式轉換數據的數據透視表。當我試着使用matplotlib陰謀,我得到一個錯誤

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

(其中「ZAF」是一個國家的標籤)

什麼問題?

這是代碼:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data = pd.read_excel('raw_emissions_energy.xls','raw data', index_col = None, thousands='.',parse_cols="A,C,F,M") 

data['Year'] = data['Year'].astype(str) 
data['COU'] = data['COU'].astype(str) 

# generate sub-datasets for specific VARs 

data_CO2PROD = pd.pivot_table(data[(data['VAR']=='CO2_PBPROD')], index='COU', columns='Year') 

plt.plot(data_CO2PROD) 

與原始數據XLS文件的樣子: raw data Excel view

enter image description here

這是我從data_CO2PROD.info()

得到
<class 'pandas.core.frame.DataFrame'> 
Index: 105 entries, ARE to ZAF 
Data columns (total 16 columns): 
(Value, 1990) 104 non-null float64 
(Value, 1995) 105 non-null float64 
(Value, 2000) 105 non-null float64 
(Value, 2001) 105 non-null float64 
(Value, 2002) 105 non-null float64 
(Value, 2003) 105 non-null float64 
(Value, 2004) 105 non-null float64 
(Value, 2005) 105 non-null float64 
(Value, 2006) 105 non-null float64 
(Value, 2007) 105 non-null float64 
(Value, 2008) 105 non-null float64 
(Value, 2009) 105 non-null float64 
(Value, 2010) 105 non-null float64 
(Value, 2011) 105 non-null float64 
(Value, 2012) 105 non-null float64 
(Value, 2013) 105 non-null float64 
dtypes: float64(16) 
memory usage: 13.9+ KB 
None 
+0

可以分享你的'xls'? – jezrael

+0

剛剛在問題末尾添加了截圖 –

+0

值「ZAF」在哪裏?只有在'COU'列中? – jezrael

回答

0

我想你需要添加參數valuespivot_table

data_CO2PROD = pd.pivot_table(data=data[(data['VAR']=='CC')], 
           index='COU', 
           columns='Year', 
           values='Value') 

data_CO2PROD.plot() 
plt.show() 
+0

工作,與plt.show() –

+0

超。如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)它。謝謝。 – jezrael

1

使用data_CO 2PROD.plot()代替plt.plot(data_CO2PROD)允許我繪製數據。 http://pandas.pydata.org/pandas-docs/stable/visualization.html。 簡單代碼:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data= pd.DataFrame(np.random.randn(3,4), columns=['VAR','COU','Year','VAL']) 
data['VAR'] = ['CC','CC','KK'] 
data['COU'] =['ZAF','NL','DK'] 
data['Year']=['1987','1987','2006'] 
data['VAL'] = [32,33,35] 

data['Year'] = data['Year'].astype(str) 
data['COU'] = data['COU'].astype(str) 

# generate sub-datasets for specific VARs 

data_CO2PROD = pd.pivot_table(data=data[(data['VAR']=='CC')], index='COU', columns='Year') 
data_CO2PROD.plot() 
plt.show() 
+0

您是如何獲得OP數據的?你是否「OCR」? – MaxU

+0

我試過了,但我沒有得到任何陰謀(但沒有發生錯誤) –

+0

@ClaB,這就是爲什麼你總是應該以TEXT/CSV形式發佈你的數據集,但不能作爲圖片 - 我們不能測試我們的解決方案然後... – MaxU