J'ai ceci DataFrame
et je veux seulement les enregistrements dont la EPS
colonne n'est pas NaN
:
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
... c'est-à-dire quelque chose comme df.drop(....)
pour obtenir cette trame de données résultante:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Comment je fais ça?
df.dropna(subset = ['column1_name', 'column2_name', 'column3_name'])
Réponses:
Ne laissez pas tomber, prenez simplement les lignes où EPS n'est pas NA:
la source
pandas.notnull
au lieu denp.isfinite
EPS
dans l'exemple) contient des chaînes ou d'autres types qui ne peuvent pas être digérés parnp.isfinite()
. Je recommande d'utiliser unepandas.notnull()
solution plus généreuse.Cette question est déjà résolue, mais ...
... considérez également la solution suggérée par Wouter dans son commentaire d'origine . La capacité de gérer les données manquantes, y compris
dropna()
, est explicitement intégrée aux pandas. Outre les performances potentiellement améliorées par rapport à une exécution manuelle, ces fonctions sont également fournies avec une variété d'options qui peuvent être utiles.Il existe également d'autres options (voir la documentation à http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html ), notamment la suppression de colonnes au lieu de lignes.
Assez pratique!
la source
df.dropna(subset = ['column_name'])
. J'espère que cela sauve au moins une personne les 5 secondes supplémentaires de «qu'est-ce que je fais mal». Grande réponse, +1df.dropna(subset = ['column_name'])
c'est exactement ce que je cherchais! Merci!Je sais que cela a déjà été répondu, mais juste pour une solution purement pandas à cette question spécifique par opposition à la description générale d'Aman (qui était merveilleuse) et au cas où quelqu'un d'autre arriverait à ce sujet:
la source
df.dropna(subset=['EPS'])
(basé sur la description générale d'Aman, bien sûr, cela fonctionne aussi)notnull
c'est aussi ce que Wes (auteur de Pandas) a suggéré dans son commentaire sur une autre réponse.df[pd.notnull(df[df.columns[INDEX]])]
oùINDEX
serait la colonne numérotée si vous ne connaissez pas le nomVous pouvez utiliser ceci:
la source
how='all'
est redondant ici, car vous sous-définissez la trame de données avec un seul champ, donc les deux'all'
et'any'
auront le même effet.La solution la plus simple de toutes:
la source
Vous pouvez utiliser la méthode dataframe notnull ou inverse de isnull ou numpy.isnan :
la source
Manière simple et facile
df.dropna(subset=['EPS'],inplace=True)
source: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
la source
inplace=True
est un sujet bizarre et n'a aucun effetDataFrame.dropna()
. Voir: github.com/pandas-dev/pandas/issues/16529encore une autre solution qui utilise le fait que
np.nan != np.nan
:la source
Une autre version:
la source
Series.notna()
?Dans les ensembles de données ayant un grand nombre de colonnes, il est préférable de voir combien de colonnes contiennent des valeurs nulles et combien n'en contiennent pas.
Par exemple, dans ma trame de données, il contenait 82 colonnes, dont 19 contenaient au moins une valeur nulle.
De plus, vous pouvez également supprimer automatiquement les colonnes et les lignes en fonction de celles qui ont le plus de valeurs
nulles.Voici le code qui le fait intelligemment:
Remarque: le code ci-dessus supprime toutes vos valeurs nulles. Si vous voulez des valeurs nulles, traitez-les avant.
la source
Il peut être ajouté à ce que «&» peut être utilisé pour ajouter des conditions supplémentaires, par exemple
Notez que lors de l'évaluation des déclarations, les pandas ont besoin de parenthèses.
la source
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
. Vous devez ajouter des parenthèses -df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
, mais ce n'est pas non plus la réponse à cette question.Pour une raison quelconque, aucune des réponses soumises précédemment n'a fonctionné pour moi. Cette solution de base a permis:
Bien sûr, cela supprimera également les lignes avec des nombres négatifs. Donc, si vous en voulez, il est probablement judicieux d'ajouter cela après.
la source
L'une des solutions peut être
Une autre façon peut être
J'espère que ces informations sont utiles.
la source