Je sais que je peux réinitialiser les indices comme ça
df.reset_index(inplace=True)
mais cela démarrera l'index à partir de 0
. Je veux le démarrer à partir de 1
. Comment faire sans créer de colonnes supplémentaires et en conservant la fonctionnalité et les options index/reset_index? Je pas veux créer un nouveau dataframe, donc inplace=True
devrait toujours s'appliquer.
Attribuez simplement directement un nouveau tableau d'index:
df.index = np.arange(1, len(df) + 1)
Exemple:
In [151]:
df = pd.DataFrame({'a':np.random.randn(5)})
df
Out[151]:
a
0 0.443638
1 0.037882
2 -0.210275
3 -0.344092
4 0.997045
In [152]:
df.index = np.arange(1,len(df)+1)
df
Out[152]:
a
1 0.443638
2 0.037882
3 -0.210275
4 -0.344092
5 0.997045
Ou juste:
df.index = df.index + 1
Si l'index est déjà basé sur 0
HORAIRES
Pour une raison quelconque, je ne peux pas prendre de chronométrage sur reset_index
mais voici les horaires sur un fichier df de 100 000 lignes:
In [160]:
%timeit df.index = df.index + 1
The slowest run took 6.45 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 107 µs per loop
In [161]:
%timeit df.index = np.arange(1, len(df) + 1)
10000 loops, best of 3: 154 µs per loop
Donc, sans le calendrier pour reset_index
Je ne peux pas dire de façon définitive, mais il semble que l'ajout de 1 à chaque valeur d'index sera plus rapide si l'index est déjà 0
basé
Vous pouvez également spécifier la valeur de départ en utilisant la plage d'index comme ci-dessous. RangeIndex est pris en charge dans les pandas.
#df.index
la valeur par défaut est imprimée, (start = 0, stop = lastelement, step = 1)
Vous pouvez spécifier n'importe quelle plage de valeurs de départ comme ceci:
df.index = pd.RangeIndex(start=1, stop=600, step=1)
Référer: pandas.RangeIndex