从 Pandas 系列中删除零行
Remove rows of zeros from a Pandas series
我有一个数字 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
只需过滤掉它们:
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
如果 ds
是你 DataSeries
:ds!=0
将 return 一个布尔向量,其中包含值不为零的行。
ds[ds!=0]
是保留索引的行
请注意,缺失值 (NaN
) 不会被过滤。
要过滤两者,请使用:ds[(ds!=0)&(pd.isnull(ds))]
我有一个数字 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
只需过滤掉它们:
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
如果 ds
是你 DataSeries
:ds!=0
将 return 一个布尔向量,其中包含值不为零的行。
ds[ds!=0]
是保留索引的行
请注意,缺失值 (NaN
) 不会被过滤。
要过滤两者,请使用:ds[(ds!=0)&(pd.isnull(ds))]