在Python pandas中,从1而不是零开始行索引而不创建其他列

时间:2015-08-27 12:54:08

标签: python pandas indexing dataframe

我知道我可以像这样重置索引

df.reset_index(inplace=True)

但这将从0开始索引。我想从1开始。如何在不创建任何额外列且保留index / reset_index功能和选项的情况下执行此操作?我想要创建新的数据框,因此inplace=True仍应适用。

3 个答案:

答案 0 :(得分:40)

直接分配一个新的索引数组:

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上进行计时,但以下是10万行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的时间,我无法明确地说,但是如果索引已经基于0

答案 1 :(得分:1)

您还可以使用如下所示的索引范围来指定起始值。熊猫支持RangeIndex。

#df.index

打印默认值,(开始= 0,停止=最后一个元素,步骤= 1)

您可以指定任何起始值范围,例如:

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

引用:pandas.RangeIndex

答案 2 :(得分:1)

为此,您可以执行以下操作(我创建了一个示例数据框):

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