Python 数据帧的起始索引为1

Python 数据帧的起始索引为1,python,pandas,csv,dataframe,indexing,Python,Pandas,Csv,Dataframe,Indexing,在将熊猫数据帧写入CSV时,我需要索引从1开始,而不是从0开始 下面是一个例子: In [1]: import pandas as pd In [2]: result = pd.DataFrame({'Count': [83, 19, 20]}) In [3]: result.to_csv('result.csv', index_label='Event_id') 将生成以下输出: In [4]: !cat result.csv

在将熊猫数据帧写入CSV时,我需要索引从1开始,而不是从0开始

下面是一个例子:

In [1]: import pandas as pd

In [2]: result = pd.DataFrame({'Count': [83, 19, 20]})

In [3]: result.to_csv('result.csv', index_label='Event_id')                               
将生成以下输出:

In [4]: !cat result.csv
Event_id,Count
0,83
1,19
2,20
但我想要的结果是:

In [5]: !cat result2.csv
Event_id,Count
1,83
2,19
3,20

我意识到这可以通过在我的数据帧中添加一列移位为1的整数序列来实现,但我对Pandas还不熟悉,我想知道是否存在更干净的方法。

只需在写入CSV之前设置索引即可

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

然后正常写入。

索引是一个对象,默认索引从
0
开始:

>>> result.index
Int64Index([0, 1, 2], dtype=int64)
您可以使用将此索引移动
1

>>> result.index += 1 
>>> result.index
Int64Index([1, 2, 3], dtype=int64)
资料来源:

工作示例:

import pandas as pdas
dframe = pdas.read_csv(open(input_file))
dframe.index = dframe.index + 1

一行中的另一种方式:

df.shift()[1:]
这对我有用

 df.index = np.arange(1, len(df)+1)
您可以使用这个:

import pandas as pd

result = pd.DataFrame({'Count': [83, 19, 20]})
result.index += 1
print(result)
或者这个,通过得到
numpy
库的帮助,如下所示:

import pandas as pd
import numpy as np

result = pd.DataFrame({'Count': [83, 19, 20]})
result.index = np.arange(1, len(result)+1)
print(result)

np.arange
将创建一个numpy数组,并在给定的间隔内返回值,该间隔为
(1,len(result)+1)
,最后您将该数组分配给
结果。索引

从原始答案中分叉,给出一些美分:

  • 如果我没有弄错的话,从版本0.23开始,索引对象是
    RangeIndex
    type
从:

RangeIndex
Int64Index
的一种节省内存的特例,仅限于表示单调范围。在某些情况下,使用
范围索引可以提高计算速度

在索引范围很大的情况下,使用索引的表示形式而不是一次定义整个索引(节省内存)是有意义的

因此,举一个例子(使用Series,但也适用于DataFrame):

>>将熊猫作为pd导入
>>> 
>>>国家=[‘中国’、‘印度’、‘美国’]
>>>ds=pd.系列(国家)
>>> 
>>>
>>>类型(ds.index)
>>>ds索引
范围索引(开始=0,停止=3,步骤=1)
>>> 
>>>ds.index+=1
>>> 
>>>ds索引
范围索引(开始=1,停止=4,步骤=1)
>>> 
>>>ds
1中国
2印度
3美国
数据类型:对象
>>> 
如您所见,
索引
对象的增量会更改
开始
停止
参数。

使用此选项

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

在我看来,最好的办法是用


我更喜欢这样,因为您可以在一行中为索引定义范围和一个可能的
步骤
和一个
名称

它会以某种方式更改索引名称-因此正确的命名顺序是:df.index+=1;df.index.name='name'其中np是这样导入的:import numpy as npit应该是df.index=arange(1,len(df)+1)有效方式:df.index=range(1,df.shape[0]+1)这会删除最后一行。
df.index = np.arange(1, len(df)+1)
import pandas as pd

result = pd.DataFrame({'Count': [83, 19, 20]}, 
                      index=pd.RangeIndex(start=1, stop=4, name='index')
                     )
>>> result
       Count
index       
1         83
2         19
3         20