我在数据框的顶部有一个零的数据框。这些零作为NA。我想删除它们,直到其他值开始出现。
所以,我想要这个数据帧:
df_
Out[114]:
A B C
2016-08-27 -0.263963 0.000000 0.693514
2016-08-28 -0.085663 0.000000 -0.715981
2016-08-29 1.408283 0.000000 2.513716
2016-08-30 -0.591532 0.000000 -1.468227
2016-08-31 -0.973261 0.000000 0.848670
2016-09-01 0.694384 -0.214615 0.561752
2016-09-02 -1.468527 0.259413 1.195574
2016-09-03 -1.471785 0.006788 0.688078
2016-09-04 -0.817770 0.453037 0.632851
2016-09-05 1.129863 0.000000 -0.296562
只删除前5行,但保留其余的行(包括最后的行),因为列'B'在前五行中包含零。
答案 0 :(得分:4)
您可以使用all
和0
测试所有行是否不等于axis=1
,我们使用它来屏蔽df并调用first_valid_index
并使用此片段进行切片df:
In [40]:
df.loc[df[(df != 0).all(axis=1)].first_valid_index():]
Out[40]:
A B C
2016-09-01 0.694384 -0.214615 0.561752
2016-09-02 -1.468527 0.259413 1.195574
2016-09-03 -1.471785 0.006788 0.688078
2016-09-04 -0.817770 0.453037 0.632851
2016-09-05 1.129863 0.000000 -0.296562
这是内部测试的输出:
In [37]:
(df != 0).all(axis=1)
Out[37]:
2016-08-27 False
2016-08-28 False
2016-08-29 False
2016-08-30 False
2016-08-31 False
2016-09-01 True
2016-09-02 True
2016-09-03 True
2016-09-04 True
2016-09-05 False
dtype: bool