J'ai un ensemble de données que je voudrais préparer pour la visualisation sous forme de données de séries chronologiques.

import pandas as pd
import numpy as np

df = pd.read_excel('mypath.xlsx', usecols=['Account', 'Jan', 'Feb', 'Mar'])

df

Account Jan Feb Mar
0   300 NaN NaN NaN
1   310 -33 -33 -33
2   320  10   5   7

Maintenant, j'aimerais faire pivoter ce dataframe pour avoir la colonne Compte comme première ligne et idéalement les mois (janvier, février, mars) comme index et convertis en period_index, afin que je puisse calculer les deltas temporels, etc.

Alors je fais ça:

df = df.pivot_table(df, columns = ['Account'], fill_value = 0)

Account 300 310 320 
Feb       0 -33   5
Jan       0 -33  10
Mar       0 -33   7

Comment pourrais-je faire de janvier, février, mars un index_période et agir comme un index réel dans cet exemple?

############################

La solution pour obtenir un period_index est la suivante:

idx = pd.to_datetime('2018-' + df.index)
print(idx)

[OUT]
DatetimeIndex(['2018-02-01', '2018-01-01', '2018-03-01'], dtype='datetime64[ns]', freq=None)

Conversion en cours au format period_index

df.index = idx.to_period(freq='M')
print(df.index)

[OUT]
PeriodIndex(['2018-02', '2018-01', '2018-03'], dtype='period[M]', freq='M')

Finalement, cela ressemble à ceci:

Account 300 310 320 
2018-02   0 -33   5
2018-01   0 -33  10
2018-03   0 -33   7
0
mks 30 août 2020 à 14:49

2 réponses

Meilleure réponse

Vous pouvez simplement modifier votre index comme -

df.index = pd.to_datetime('2018-' + df.index)

Donc, si vos index de lignes sont dans l'ordre brouillé comme indiqué dans la question ... alors vous pouvez également les convertir en pandas datetime.

1
Abhilash Awasthi 30 août 2020 à 12:13

Utilisez pandas.date_range + Index.map

df.index = (
    df.index.map({v.strftime("%b") : v for v in pd.date_range("2018-01", "2018-03", freq="MS")})
)

df.index
Out[617]: DatetimeIndex(['2018-02-01', '2018-01-01', '2018-03-01'], dtype='datetime64[ns]', freq=None)
1
sushanth 30 août 2020 à 12:09