Подтвердить что ты не робот

В Python pandas, начинайте строку с 1 вместо нуля, не создавая дополнительный столбец

Я знаю, что я могу reset индексы, подобные этому

df.reset_index(inplace=True)

но это запустит индекс из 0. Я хочу запустить его из 1. Как это сделать, не создавая дополнительных столбцов и сохраняя функциональность и параметры index/reset_index? Я не хочу создавать новую фреймворк данных, поэтому inplace=True должен применяться.

4b9b3361

Ответ 1

Просто назначьте новый массив индексов:

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

Пример:

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

Или просто:

df.index = df.index + 1

Если индекс уже равен 0 на основе

тайминги

По какой-то причине я не могу принимать тайминги на reset_index, но следующие тайминги для строки 10000 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

Итак, без времени для reset_index я не могу сказать окончательно, однако похоже, что только добавление 1 к каждому индексу будет быстрее, если индекс уже 0 основан на

Ответ 2

Вы также можете указать начальное значение, используя диапазон индекса, как показано ниже. RangeIndex поддерживается в пандах.

#df.index

печатается значение по умолчанию, (start = 0, stop = lastelement, step = 1)

Вы можете указать любой начальный диапазон значений следующим образом:

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

См.: pandas.RangeIndex