pandas.DataFrame.reset_index() 是一个常用于重置 DataFrame 索引的方法,尤其在多级索引或对索引进行了修改后,想要恢复为默认的 RangeIndex 时非常有用。本文主要介绍一下Pandas中pandas.DataFrame.reset_index方法的使用。

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='') [source]

重置索引或索引的一个级别。

重置DataFrame的索引,并使用默认索引。如果DataFrame有一个MultiIndex,此方法可以删除一个或多个级别。

参数:

level : int, str, tuple, 或list, 

默认为None

只从索引中删除给定的级别。默认移除所有级别。

drop : bool, 默认为False

不要尝试向dataframe列插入索引。

这会将索引重置为默认整数索引。

inplace : bool, 默认为False

适当地修改DataFrame(不要创建新对象)。

col_level : intstr, 默认为 0

如果列有多个级别,请确定将标签插入到哪个级别。

默认情况下,它被插入到第一级。

col_fill : object, default ‘’

如果列有多个级别,请确定其他级别的命名方式。

如果没有,则重复索引名。

返回值:

DataFrameNone

53/5000

带有新索引的DataFrame,如果inplace=True

None

例子,

1)基本 DataFrame 重置索引

import pandas as pd
import numpy as np

df = pd.DataFrame([('bird', 389.0),
                   ('bird', 24.0),
                   ('mammal', 80.5),
                   ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))

# 默认行为:索引变为列,新索引为 RangeIndex
df_reset = df.reset_index()
print(df_reset)

2)不保留原索引列(drop=True)

import pandas as pd
import numpy as np

df = pd.DataFrame([('bird', 389.0),
                   ('bird', 24.0),
                   ('mammal', 80.5),
                   ('mammal', np.nan)],
                  index=['falcon', 'parrot', 'lion', 'monkey'],
                  columns=('class', 'max_speed'))

print(df)
df_reset_drop = df.reset_index(drop=True)
print(df_reset_drop)

3)重置 MultiIndex 的部分层级

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_tuples(
  [('bird', 'falcon'),
('bird', 'parrot'),
('mammal', 'lion'),
('mammal', 'monkey')],
names=['class', 'name'])

columns = pd.MultiIndex.from_tuples(
  [('speed', 'max'), ('species', 'type')])

df_multi = pd.DataFrame([(389.0, 'fly'),
                         (24.0, 'fly'),
                         (80.5, 'run'),
                         (np.nan, 'jump')],
                        index=index,
                        columns=columns)
print(df_multi)
# 重置 class 层级
df_reset_class = 
df_multi.reset_index(level='class')
print(df_reset_class)

4)使用 col_level 指定插入层级

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_tuples(
  [('bird', 'falcon'),
('bird', 'parrot'),
('mammal', 'lion'),
('mammal', 'monkey')],
names=['class', 'name'])

columns = pd.MultiIndex.from_tuples(
  [('speed', 'max'), ('species', 'type')])

df_multi = pd.DataFrame([(389.0, 'fly'),
                         (24.0, 'fly'),
                         (80.5, 'run'),
                         (np.nan, 'jump')],
                        index=index,
                        columns=columns)
print(df_multi)
df_reset_col_level = df_multi.reset_index(level='class', col_level=1)
print(df_reset_col_level)

5)使用 col_fill 指定列标签缺失时的填充值

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_tuples(
  [('bird', 'falcon'),
('bird', 'parrot'),
('mammal', 'lion'),
('mammal', 'monkey')],
names=['class', 'name'])

columns = pd.MultiIndex.from_tuples(
  [('speed', 'max'), ('species', 'type')])

df_multi = pd.DataFrame([(389.0, 'fly'),
                         (24.0, 'fly'),
                         (80.5, 'run'),
                         (np.nan, 'jump')],
                        index=index,
                        columns=columns)
print(df_multi)
df_reset_col_fill = df_multi.reset_index(
  level='class', col_level=1,
  col_fill='species')
print(df_reset_col_fill)

6)使用 col_fill 指定一个新的列层级名

import pandas as pd
import numpy as np

index = pd.MultiIndex.from_tuples(
  [('bird', 'falcon'),
('bird', 'parrot'),
('mammal', 'lion'),
('mammal', 'monkey')],
names=['class', 'name'])

columns = pd.MultiIndex.from_tuples(
  [('speed', 'max'), ('species', 'type')])

df_multi = pd.DataFrame([(389.0, 'fly'),
                         (24.0, 'fly'),
                         (80.5, 'run'),
                         (np.nan, 'jump')],
                        index=index,
                        columns=columns)
print(df_multi)
df_reset_new_level = df_multi.reset_index(
  level='class', col_level=1, 
  col_fill='genus')
print(df_reset_new_level)

推荐文档

相关文档

大家感兴趣的内容

随机列表