我们在使用drop函数删除指定值的行后,原来的索引还是保留的!这可能会在后续的处理中,出现一些莫名其妙的错误。因此如果可以,最好drop完重置一下索引(个人看法)。

        就比如我在做pd.concat时候,竟然合并完,多出了几行。。。


下面举一个例子来讲解:

import pandas as pd
import numpy as np

#create dataFrame
df = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   'points': [18, np.nan, 19, 14, 14, 11, 20, 28],
                   'assists': [5, 7, 7, 9, 12, np.nan, 9, 4],
                   'rebounds': [11, 8, 10, 6, 6, 5, np.nan, 12]})

#view DataFrame
print(df)
team  points  assists  rebounds
0    A    18.0      5.0      11.0
1    B     NaN      7.0       8.0
2    C    19.0      7.0      10.0
3    D    14.0      9.0       6.0
4    E    14.0     12.0       6.0
5    F    11.0      NaN       5.0
6    G    20.0      9.0       NaN
7    H    28.0      4.0      12.0

现在假设我们使用 dropna函数从数据帧中删除任何列中缺少值的所有行:

#drop rows with nan values in any column
df = df.dropna()

#view updated DataFrame
print(df)
team  points  assists  rebounds
0    A    18.0      5.0      11.0
2    C    19.0      7.0      10.0
3    D    14.0      9.0       6.0
4    E    14.0     12.0       6.0
7    H    28.0      4.0      12.0

可以看到,索引仍包含每行的原始索引值

要在使用 dropna函数后重置索引,我们可以使用以下语法:

#drop rows with nan values in any column
df = df.dropna().reset_index(drop=True)

#view updated DataFrame
print(df)
team  points  assists  rebounds
0    A    18.0      5.0      11.0
1    C    19.0      7.0      10.0
2    D    14.0      9.0       6.0
3    E    14.0     12.0       6.0
4    H    28.0      4.0      12.0

这时候,已删除具有缺失值的每一行,并重置了索引值。索引值现在的范围为 0 到 4。


        当然,在任何时候你都可以使用重置索引:

df.reset_index(drop=True)

        注意,drop=True如果不写,那原始的索引列还会在,从而多出了新索引一列。如果可以,建议加上。