In Python-panda’s, start de rij-index vanaf 1 in plaats van nul zonder een extra kolom te maken

Ik weet dat ik de indices zo kan resetten

df.reset_index(inplace=True)

maar hierdoor start de index vanaf 0. Ik wil het starten vanaf 1. Hoe doe ik dat zonder extra kolommen te maken en door de index/reset_index functionaliteit en opties te behouden? Ik wil geeneen nieuw dataframe maken, dus inplace=Truemoet nog steeds van toepassing zijn.


Antwoord 1, autoriteit 100%

Wijs direct een nieuwe indexarray toe:

df.index = np.arange(1, len(df) + 1)

Voorbeeld:

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

Of gewoon:

df.index = df.index + 1

Als de index al op 0 is gebaseerd

TIJDEN

Om de een of andere reden kan ik geen timings opnemen op reset_index, maar de volgende zijn timings op een 100.000 rij df:

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

Dus zonder de timing voor reset_indexkan ik het niet definitief zeggen, maar het lijkt erop dat het toevoegen van 1 aan elke indexwaarde sneller zal zijn als de index al 0is gebaseerd


Antwoord 2, autoriteit 7%

U kunt de startwaarde ook specificeren met het indexbereik zoals hieronder. RangeIndex wordt ondersteund in panda’s.

#df.index

standaardwaarde wordt afgedrukt, (start=0,stop=lastelement, step=1)

U kunt elk beginwaardebereik als volgt specificeren:

df.index = pd.RangeIndex(start=1, stop=600, step=1)

Raadpleeg: pandas.RangeIndex


Antwoord 3, autoriteit 2%

Hiervoor kunt u het volgende doen (ik heb een voorbeelddataframe gemaakt):

price_of_items = pd.DataFrame({
"Wired Keyboard":["$7","4.3","12000"],"Wireless Keyboard":["$13","4.6","14000"]
                             })
price_of_items.index += 1

Other episodes