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
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
Est-ce possible votre part 'xls'? – jezrael
vient d'ajouter une capture d'écran à la fin de la question –
Et où est la valeur 'ZAF'? Seulement dans la colonne "COU"? – jezrael