web-dev-qa-db-fra.com

Supprimer des lignes de zéros d'une série Pandas

J'ai un nombre Pandas série avec 601 lignes indexées par date comme indiqué ci-dessous. Les valeurs sont nulles jusqu'à un point, après quoi toutes les valeurs sont non nulles. Ce point varie avec chaque série mais je voudrais un moyen de supprimer toutes les lignes où la valeur est nulle tout en conservant l'intégrité de l'index de date.

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
13
BLL27

Il suffit de les filtrer:

users[users!=0]

Cela préservera également votre index

Ou

users[users > 0]

si ce sont des valeurs positives que vous recherchez:

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
29
EdChum

si ds est vous DataSeries: ds!=0 renverra un vecteur booléen de lignes avec des valeurs différentes de zéro.

ds[ds!=0] Sont les lignes, avec l'index préservé

Notez que les valeurs manquantes (NaN) ne seront pas filtrées.

Pour filtrer les deux, utilisez: ds[(ds!=0)&(pd.isnull(ds))]

5
Uri Goren