Pandas est utilisé pour traiter diverses données en Python, mais jusqu'à présent, lors de la recherche d'une valeur numérique spécifique, il était normalement traité un par un avec for
ou df.iterrows ()
.
Mais lorsque les données grossissent, c'est plus lent.
Après avoir cherché s'il y a un bon moyen, il semble qu'il vaut mieux utiliser df.ix []
comme masque (filtre?).
Par exemple, supposons que vous ayez un bloc de données comme celui-ci:
print df
A B C D E
TIME
2001-01-08 06:00:00 -0.5925 -1.11 0.055023 -0.074103 0.129126
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -0.3613 -2.19 NaN NaN NaN
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
2001-01-08 06:25:00 -0.8243 -0.65 0.137242 -0.022502 2.145931
Je veux connaître la colonne NaN dans la ligne B
print df.ix[df["B"].isnull()]
A B C D E
TIME
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
Je veux connaître les colonnes qui ne sont pas NaN dans la ligne E
print df.ix[df["E"].isnull()==False]
A B C D E
TIME
2001-01-08 06:00:00 -0.5925 -1.11 0.055023 -0.074103 0.129126
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
2001-01-08 06:25:00 -0.8243 -0.65 0.137242 -0.022502 2.145931
Recherche frappée quelle que soit la ligne NaN
print df.ix[df.isnull().values.any()]
A B C D E
TIME
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -0.3613 -2.19 NaN NaN NaN
2001-01-08 06:15:00 -0.3613 NaN NaN NaN 0.224574
2001-01-08 06:20:00 -0.3613 NaN 0.129036 -0.000281 1.094003
Je ne veux que les trois premières colonnes où la ligne C est NaN
print df.ix[df["C"].isnull(), :3]
A B C D E
TIME
2001-01-08 06:05:00 -0.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -0.3613 -2.19 NaN NaN NaN
Je veux les lignes A et B d'une colonne qui est NaN dans la ligne D
print df.ix[df["D"].isnull(), ["A", "B"]]
A B
TIME
2001-01-08 06:05:00 -0.4213 NaN
2001-01-08 06:10:00 -0.3613 -2.19
2001-01-08 06:15:00 -0.3613 Nan
Manipulez le nombre de la ligne A de la colonne NaN de la ligne D (essayez de soustraire 1)
df.ix[df["D"].isnull(), "A"] -= 1
print df["A"]
A
TIME
2001-01-08 06:00:00 -0.5925
2001-01-08 06:05:00 -1.4213
2001-01-08 06:10:00 -1.3613
2001-01-08 06:15:00 -1.3613
2001-01-08 06:20:00 -0.3613
2001-01-08 06:25:00 -0.8243
Recherche conditionnelle dans l'état ci-dessus
print df["A"]
A
TIME
2001-01-08 06:00:00 -0.5925
2001-01-08 06:05:00 -1.4213
2001-01-08 06:10:00 -1.3613
2001-01-08 06:15:00 -1.3613
2001-01-08 06:20:00 -0.3613
2001-01-08 06:25:00 -0.8243
print df.ix[df["A"]<= -1]
A B C D E
TIME
2001-01-08 06:05:00 -1.4213 NaN NaN NaN NaN
2001-01-08 06:10:00 -1.3613 -2.19 NaN NaN NaN
2001-01-08 06:15:00 -1.3613 NaN NaN NaN 0.224574
C'est petit dans cet exemple, mais c'est assez rapide même avec de grandes trames de données.
Postscript
Df.apply (function, axis = 1)
semble être le meilleur lorsque vous voulez utiliser les valeurs numériques de chaque colonne avec des expressions conditionnelles compliquées.
Recommended Posts