Python 数据帧的起始索引为1
在将熊猫数据帧写入CSV时,我需要索引从1开始,而不是从0开始 下面是一个例子: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
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