如何重置 Pandas 数据框中的索引?
- 2025-01-13 08:53:00
- admin 原创
- 102
问题描述:
我有一个数据框,我从中删除了一些行。结果,我得到了一个数据框,其中的索引类似于[1,5,6,10,11]
,我想将其重置为[0,1,2,3,4]
。我该怎么做?
以下似乎有效:
df = df.reset_index()
del df['index']
以下操作无效:
df = df.reindex()
解决方案 1:
DataFrame.reset_index
就是您要找的内容。如果您不想将其保存为列,请执行以下操作:
df = df.reset_index(drop=True)
如果您不想重新分配:
df.reset_index(drop=True, inplace=True)
解决方案 2:
另一个解决方案是分配RangeIndex
或range
:
df.index = pd.RangeIndex(len(df.index))
df.index = range(len(df.index))
速度更快:
df = pd.DataFrame({'a':[8,7], 'c':[2,4]}, index=[7,8])
df = pd.concat([df]*10000)
print (df.head())
In [298]: %timeit df1 = df.reset_index(drop=True)
The slowest run took 7.26 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 105 µs per loop
In [299]: %timeit df.index = pd.RangeIndex(len(df.index))
The slowest run took 15.05 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 7.84 µs per loop
In [300]: %timeit df.index = range(len(df.index))
The slowest run took 7.10 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 14.2 µs per loop
解决方案 3:
data1.reset_index(inplace=True)
解决方案 4:
df.reset_index(drop=True)
有效地用默认的 RangeIndex 替换索引。执行相同操作的另一种方法是直接使用分配新索引set_axis()
(我相信这是 OP 尝试的reindex
)。因此,以下两个返回相同的输出:
df1 = df.set_axis(range(len(df)))
df2 = df.reset_index(drop=True)
请注意,pandas 中大多数删除/修改行的方法/函数(例如drop_duplicates()
、、等)都有参数,当传递 True 时,它会在单个函数调用中将索引重置为 RangeIndex。因此,如果您要删除sort_values()
/添加数据框中的行,请留意此参数。示例:dropna()
`pd.concat()`ignore_index
df.dropna().reset_index(drop=True) # <--- instead of this
df.dropna(ignore_index=True) # <--- use this
这样,您inplace
也可以使用参数。
df1 = df.dropna().reset_index(drop=True) # <--- must assign to dataframe
df.dropna(ignore_index=True, inplace=True) # <--- `df` modified in-place
如果您使用groupby
并希望将索引替换为默认的 RangeIndex,则在同一个函数调用中,当传递 False 时,参数会将索引重置为 RangeIndex。因此,不要使用 ,as_index
而要使用。df.groupby('col1').mean().reset_index()
`df.groupby('col1', as_index=False).mean()`
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD