2016-09-18 75 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