J'ai un cadre de données pandas avec des colonnes comme celle-ci:
df.columns = pd.to_datetime(list(df)) #list(df) = ["2017-01", "2016-01", ...]
Ensuite, j'ai effectué une interpolation dans chaque ligne de l'ensemble de données, car je souhaite supprimer certains NaN. Voici le résultat imprimé:
ORIGINAL
2007-12-01 NaN
2008-12-01 NaN
2009-12-01 NaN
2010-12-01 -0.35
2011-12-01 0.67
2012-12-01 NaN
2013-12-01 NaN
2014-12-01 1.03
2015-12-01 0.37
2016-12-01 NaN
2017-12-01 NaN
Name: row1, dtype: float64
INTERPOLATION
2007-12-01 -0.350000
2008-12-01 -0.350000
2009-12-01 -0.350000
2010-12-01 -0.350000
2011-12-01 0.670000
2012-12-01 0.790219
2013-12-01 0.910109
2014-12-01 1.030000
2015-12-01 0.370000
2016-12-01 0.370000
2017-12-01 0.370000
Name: row1, dtype: float64
Ensuite, j'essaie de tracer la ligne interpolée et d'obtenir:
TypeError: float() argument must be a string or a number, not 'Period'
Le code entier:
print("ORIGINAL\n", series)
interpolation = series.interpolate(method=func, limit=10, limit_direction='both')
interpolation.plot()
print("INTERPOLATION\n",interpolation)
Il me semble que l'erreur réside dans les valeurs temporelles de la série, mais je pense que matplotlib devrait être capable de la gérer, alors je fais quelque chose de mal, à coup sûr. Merci d'avance.
Ceci est un bogue dans les pandas et sera corrigé par la prochaine version majeure de d’ici le 31 août 2018 si tout se passe bien.
Pour l'instant, la solution de contournement de @ J63 doit être remplie. Cela, ou installez une version antérieure de pandas, telle que 0.20.2.
Cela fonctionne si je le fais:
plt.plot(row.index, row.values)
plt.show()
Je ne sais pas pourquoi si ...
Copié vos résultats d'interpolation
df = pd.read_clipboard(header=None)
df.columns = ['Period','Value']
df['Period'] = pd.to_datetime(df['Period'])
df = df.set_index('Period')
print(df)
Value
Period
2007-12-01 -0.350000
2008-12-01 -0.350000
2009-12-01 -0.350000
2010-12-01 -0.350000
2011-12-01 0.670000
2012-12-01 0.790219
2013-12-01 0.910109
2014-12-01 1.030000
2015-12-01 0.370000
2016-12-01 0.370000
2017-12-01 0.370000
df.plot()