在将Pandas DataFrame写入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的新手,我想知道是否存在更清晰的方法。
答案 0 :(得分:56)
索引是一个对象,默认索引从0
开始:
>>> result.index
Int64Index([0, 1, 2], dtype=int64)
您可以使用
将此索引移至1
>>> result.index += 1
>>> result.index
Int64Index([1, 2, 3], dtype=int64)
答案 1 :(得分:9)
在写入csv之前设置索引。 df.index = np.arange(1, len(df))
然后正常写。
答案 2 :(得分:4)
来源:In Python pandas, start row index from 1 instead of zero without creating additional column
工作示例:
import pandas as pdas
dframe = pdas.read_csv(open(input_file))
dframe.index = dframe.index + 1
答案 3 :(得分:4)
一行中的另一种方式:
df.shift()[1:]
答案 4 :(得分:4)
这对我有用
df.index = np.arange(1, len(df)+1)
答案 5 :(得分:1)
在我看来,最好的方法是使用 RangeIndex
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
我更喜欢这样,因为您可以在一行中定义范围以及索引的可能 step
和 name
。
答案 6 :(得分:0)
您可以使用这个:
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)
中返回值,最后将该数组分配给result.index
。
答案 7 :(得分:0)
从原始答案中分叉,得到一些美分:
RangeIndex
类型来自official doc:
RangeIndex
是Int64Index
的一种节省内存的特殊情况,仅限于表示单调范围。在某些情况下,使用RangeIndex
可能提高计算速度。
在索引范围很大的情况下,使用索引的表示方式是有意义的,而不是立即定义整个索引(节省内存)。
因此,有一个示例(使用Series,但它也适用于DataFrame):
>>> import pandas as pd
>>>
>>> countries = ['China', 'India', 'USA']
>>> ds = pd.Series(countries)
>>>
>>>
>>> type(ds.index)
<class 'pandas.core.indexes.range.RangeIndex'>
>>> ds.index
RangeIndex(start=0, stop=3, step=1)
>>>
>>> ds.index += 1
>>>
>>> ds.index
RangeIndex(start=1, stop=4, step=1)
>>>
>>> ds
1 China
2 India
3 USA
dtype: object
>>>
如您所见,index
对象的增量改变了start
和stop
参数。
答案 8 :(得分:0)
使用此 df.index = np.arange(1,len(df)+1)