我们在使用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如果不写,那原始的索引列还会在,从而多出了新索引一列。如果可以,建议加上。