【问题标题】:Remove rows of zeros from a Pandas series从 Pandas 系列中删除零行
【发布时间】:2015-11-11 01:46:23
【问题描述】:

我有一个编号Pandas 系列,其中包含按日期索引的 601 行,如下所示。这些值在某一点之前为零,之后所有值都非零。这一点因每个系列而异,但我想要一种方法来删除值为零的所有行,同时保持日期索引的完整性。

Name: users, dtype: float64 dates
2015-08-17 14:29:59-04:00    18
2015-08-16 14:29:59-04:00     3
2015-08-15 14:29:59-04:00    11
2015-08-14 14:29:59-04:00    12
2015-08-13 14:29:59-04:00     8
2015-08-12 14:29:59-04:00    10
2015-08-11 14:29:59-04:00     6
2015-08-10 14:29:59-04:00     6
2015-08-09 14:29:59-04:00     7
2015-08-08 14:29:59-04:00     7
2015-08-07 14:29:59-04:00    13
2015-08-06 14:29:59-04:00    16
2015-08-05 14:29:59-04:00    12
2015-08-04 14:29:59-04:00    14
2015-08-03 14:29:59-04:00     5
2015-08-02 14:29:59-04:00     5
2015-08-01 14:29:59-04:00     8
2015-07-31 14:29:59-04:00     6
2015-07-30 14:29:59-04:00     7
2015-07-29 14:29:59-04:00     9
2015-07-28 14:29:59-04:00     7
2015-07-27 14:29:59-04:00     5
2015-07-26 14:29:59-04:00     4
2015-07-25 14:29:59-04:00     8
2015-07-24 14:29:59-04:00     8
2015-07-23 14:29:59-04:00     8
2015-07-22 14:29:59-04:00     9
2015-07-21 14:29:59-04:00     5
2015-07-20 14:29:59-04:00     7
2015-07-19 14:29:59-04:00     6
                             ..
2014-01-23 13:29:59-05:00     0
2014-01-22 13:29:59-05:00     0
2014-01-21 13:29:59-05:00     0
2014-01-20 13:29:59-05:00     0
2014-01-19 13:29:59-05:00     0
2014-01-18 13:29:59-05:00     0
2014-01-17 13:29:59-05:00     0
2014-01-16 13:29:59-05:00     0
2014-01-15 13:29:59-05:00     0
2014-01-14 13:29:59-05:00     0
2014-01-13 13:29:59-05:00     0
2014-01-12 13:29:59-05:00     0
2014-01-11 13:29:59-05:00     0
2014-01-10 13:29:59-05:00     0
2014-01-09 13:29:59-05:00     0
2014-01-08 13:29:59-05:00     0
2014-01-07 13:29:59-05:00     0
2014-01-06 13:29:59-05:00     0
2014-01-05 13:29:59-05:00     0
2014-01-04 13:29:59-05:00     0
2014-01-03 13:29:59-05:00     0
2014-01-02 13:29:59-05:00     0
2014-01-01 13:29:59-05:00     0
2013-12-31 13:29:59-05:00     0
2013-12-30 13:29:59-05:00     0
2013-12-29 13:29:59-05:00     0
2013-12-28 13:29:59-05:00     0
2013-12-27 13:29:59-05:00     0
2013-12-26 13:29:59-05:00     0
2013-12-25 13:29:59-05:00     0

【问题讨论】:

    标签: python pandas series


    【解决方案1】:

    只需过滤掉它们:

    users[users!=0]
    

    这也将保留您的索引

    或者

    users[users > 0]
    

    如果你追求的是正值:

    In [38]:
    s[s>0]
    
    Out[38]:
    2015-08-17 18:29:59    18
    2015-08-16 18:29:59     3
    2015-08-15 18:29:59    11
    2015-08-14 18:29:59    12
    2015-08-13 18:29:59     8
    2015-08-12 18:29:59    10
    2015-08-11 18:29:59     6
    2015-08-10 18:29:59     6
    2015-08-09 18:29:59     7
    2015-08-08 18:29:59     7
    2015-08-07 18:29:59    13
    2015-08-06 18:29:59    16
    2015-08-05 18:29:59    12
    2015-08-04 18:29:59    14
    2015-08-03 18:29:59     5
    2015-08-02 18:29:59     5
    2015-08-01 18:29:59     8
    2015-07-31 18:29:59     6
    2015-07-30 18:29:59     7
    2015-07-29 18:29:59     9
    2015-07-28 18:29:59     7
    2015-07-27 18:29:59     5
    2015-07-26 18:29:59     4
    2015-07-25 18:29:59     8
    2015-07-24 18:29:59     8
    2015-07-23 18:29:59     8
    2015-07-22 18:29:59     9
    2015-07-21 18:29:59     5
    2015-07-20 18:29:59     7
    2015-07-19 18:29:59     6
    Name: 1, dtype: int64
    

    【讨论】:

    • 是否有一种流畅的方式来做到这一点(方法链,例如作为表达式末尾的过滤器)?
    【解决方案2】:

    如果ds 是你DataSeriesds!=0 将返回一个布尔向量,该向量的值不为零。

    ds[ds!=0] 是行,保留索引

    请注意,缺失值 (NaN) 不会被过滤。

    要过滤两者,请使用:ds[(ds!=0)&(pd.isnull(ds))]

    【讨论】:

    • ds[(ds!=0)&(pd.isnull(ds))] 没有帮助删除 value = NaN 的行。
    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 2021-12-31
    • 2016-05-26
    • 2014-02-05
    • 2017-05-18
    • 1970-01-01
    • 2018-05-01
    相关资源
    最近更新 更多