在Pandas系列中删除行并清理索引
我有一个Pandas的Series(类似于一个列表),我想根据一个随机生成的数字来选择一行(代码示例中是第5行),然后把这一行删除。删除后,我希望剩下的行能重新编号,从0到8。下面是代码:
print 'Original series: ', sample_mean_series
print 'Length of original series', len(sample_mean_series)
sample_mean_series = sample_mean_series.drop([5],axis=0)
print 'Series with item 5 dropped: ', sample_mean_series
print 'Length of modified series:', len(sample_mean_series)
print sample_mean_series.reindex(range(len(sample_mean_series)))
这是运行后的结果:
Original series:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 -0.000051
6 0.000125
7 -0.000108
8 -0.000009
9 -0.000052
Length of original series 10
Series with item 5 dropped:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
6 0.000125
7 -0.000108
8 -0.000009
9 -0.000052
Length of modified series: 9
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 NaN
6 0.000125
7 -0.000108
8 -0.000009
我的问题是,第8行被删除了。我想删除的是“5 NaN”这一行,而保留-0.000052,并且希望剩下的行的索引能从0到8。这样看起来才是我想要的:
0 0.000074
1 -0.000067
2 0.000076
3 -0.000017
4 -0.000038
5 0.000125
6 -0.000108
7 -0.000009
8 -0.000052
4 个回答
0
要在一个数据框中删除行,并且整理索引:
b = df['amount'] > 10000
df_dropped = df.drop(df[~b].index).reset_index()
15
这里有一句简单的代码:
In [1]: s
Out[1]:
0 -0.942184
1 0.397485
2 -0.656745
3 1.415797
4 1.123858
5 -1.890870
6 0.401715
7 -0.193306
8 -1.018140
9 0.262998
我用 Series.drop
方法来删除第5行,然后用 reset_index
来重新编号索引,使它们变得连续。如果不使用 reset_index
,索引就会从4跳到6,中间没有5。
默认情况下,reset_index
会把原来的索引放到一个 DataFrame
里,并把它和系列的值一起返回。如果传入 drop=True
,就不会发生这种情况。
In [2]: s2 = s.drop([5]).reset_index(drop=True)
In [3]: s2
Out[3]:
0 -0.942184
1 0.397485
2 -0.656745
3 1.415797
4 1.123858
5 0.401715
6 -0.193306
7 -1.018140
8 0.262998
Name: 0
17
有点让人困惑的是,reindex
并不是说“创建一个新的索引”。如果你想创建一个新的索引,只需要给 index
属性赋值就可以了。所以在你最后一步的时候,只需要这样做:sample_mean_series.index = range(len(sample_mean_series))
。