2016-09-18 1 views
1

J'ai un fichier xls avec des données organisées en long format. J'ai quatre colonnes: le nom de la variable, le nom du pays, l'année et la valeur. Après l'importation des données en Python avec pandas.read_excel, je veux tracer la série temporelle d'une variable pour différents pays. Pour ce faire, je crée un tableau croisé dynamique qui transforme les données en grand format. Lorsque je tente de tracer avec matplotlib, je reçois une erreurPython, traçant le pivot_table de Pandas à partir de données longues

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

(où « ZAF » est l'étiquette d'un pays)

Quel est le problème?

Voici le code:

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) 

Le fichier xls avec des données brutes ressemble: raw data Excel view

enter image description here

C'est ce que je reçois de 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

Est-ce possible votre part 'xls'? – jezrael

+0

vient d'ajouter une capture d'écran à la fin de la question –

+0

Et où est la valeur 'ZAF'? Seulement dans la colonne "COU"? – jezrael

Répondre

0

Je pense que vous avez besoin ajouter le paramètre values à pivot_table:

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

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

qui fonctionne, avec plt.show() –

+0

Super. Si ma réponse était utile, n'oubliez pas [accepter] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). Merci. – jezrael

1

Utilisation de data_CO 2PROD.plot() au lieu de plt.plot (data_CO2PROD) m'a permis de tracer les données. http://pandas.pydata.org/pandas-docs/stable/visualization.html. Code simple:

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

Comment avez-vous obtenu les données OP? Avez-vous "OCR"? – MaxU

+0

J'ai essayé, mais je ne reçois aucun intrigue (mais pas même une erreur) –

+0

@ClaB, ​​c'est pourquoi vous devriez toujours publier vos ensembles de données dans la forme TEXT/CSV, mais pas comme une image - nous ne pouvons pas tester notre solutions alors ... – MaxU