Python pandas: comment faire pour supprimer nan et -inf valeurs
J'ai le texte suivant dataframe
time X Y X_t0 X_tp0 X_t1 X_tp1 X_t2 X_tp2
0 0.002876 0 10 0 NaN NaN NaN NaN NaN
1 0.002986 0 10 0 NaN 0 NaN NaN NaN
2 0.037367 1 10 1 1.000000 0 NaN 0 NaN
3 0.037374 2 10 2 0.500000 1 1.000000 0 NaN
4 0.037389 3 10 3 0.333333 2 0.500000 1 1.000000
5 0.037393 4 10 4 0.250000 3 0.333333 2 0.500000
....
1030308 9.962213 256 268 256 0.000000 256 0.003906 255 0.003922
1030309 10.041799 0 268 0 -inf 256 0.000000 256 0.003906
1030310 10.118960 0 268 0 NaN 0 -inf 256 0.000000
J'ai essayé avec le suivant
df.dropna(inplace=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)
X_train = X_train.drop('time', axis=1)
X_train = X_train.drop('X_t1', axis=1)
X_train = X_train.drop('X_t2', axis=1)
X_test = X_test.drop('time', axis=1)
X_test = X_test.drop('X_t1', axis=1)
X_test = X_test.drop('X_t2', axis=1)
X_test.fillna(X_test.mean(), inplace=True)
X_train.fillna(X_train.mean(), inplace=True)
y_train.fillna(y_train.mean(), inplace=True)
Cependant, j'ai toujours cette erreur ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
chaque fois que j'essaie d'adapter un modèle de régression fit(X_train, y_train)
Comment peut-on supprimer à la fois la NaN
et -inf
valeurs en même temps?
Voulez-vous supprimer les lignes avec
Je veux supprimer (ou déplacer) eux
Remplacer
Je vous remercie, mais je suis toujours en train d'obtenir la même erreur lorsque j'essaie d'adapter un modèle de régression
quand je fais
NaN
et -inf
ou de définir les valeurs par défaut?Je veux supprimer (ou déplacer) eux
Remplacer
-inf
avec NaN
( df.replace(-np.inf, np.nan)
), alors ne la dropna()
.Je vous remercie, mais je suis toujours en train d'obtenir la même erreur lorsque j'essaie d'adapter un modèle de régression
fit(X_train, y_train)
quand je fais
df.replace(-np.inf, np.nan)
, il convertit le -inf
valeurs de NaN
. Cependant, lorsque nous ne df.dropna(inplace=True)
- il ne supprime pas TOUS les NaN
valeurs - feuilles de certaines lignes avec NaN
valeurs, et c'est pourquoi je reçois toujours le même message d'erreur. Est-il possible de forcer pour supprimer TOUTES les lignes avec NaN
valeurs?OriginalL'auteur | 2017-08-17
Vous devez vous connecter pour publier un commentaire.
Utilisation
pd.DataFrame.isin
et vérifier pour les lignes qui ont tout àpd.DataFrame.any
. Enfin, utilisez la fonction booléenne tableau à couper le dataframe.fit(X_train, y_train)
Avez-vous des valeurs trop grandes pour dtype
float32
?Comment pouvons-nous vérifier? J'ai autour de 2 millions de lignes et semble être difficile à vérifier manuellement
df[~df.isin([np.nan, np.inf, -np.inf]).any(1)].astype(np.float64)
?OriginalL'auteur piRSquared
Vous pouvez remplacer
inf
et-inf
avecNaN
, puis sélectionnez non-lignes nulles.ou
Vérifier le type de colonnes retourne pour s'assurer qu'ils sont tous comme prévu (par exemple, np.float32/64) via
df.info()
.df.info()
voici la sortieData columns (total 9 columns): time 1030291 non-null float64 X 1030291 non-null int64 Y 1030291 non-null int64 X_t0 1030291 non-null int64 X_tp0 1030291 non-null float64 X_t1 1030291 non-null float64 X_tp1 1030291 non-null float64 X_t2 1030291 non-null float64 X_tp2 1030291 non-null float64 dtypes: float64(6), int64(3) memory usage: 78.6 MB
Certaines de ces colonnes sont des nombres entiers. Je ne suis pas sûr si cela peut aider, mais essayez de convertir tout de flotteurs via
.astype(np.float64)
. À défaut, essayez dedf.describe()
pour vérifier max ou min les valeurs qui donnent de la ligne.OK, je vais Alexander. quand je fais
df.replace(-np.inf, np.nan)
, il convertit le-inf
valeurs deNaN
. Cependant, lorsque nous nedf.dropna(inplace=True)
- il ne supprime pas TOUS lesNaN
valeurs - feuilles de certaines lignes avecNaN
valeurs, et c'est pourquoi je reçois toujours le même message d'erreur. Est-il possible de forcer pour supprimer TOUTES les lignes avecNaN
valeurs?Vous devez spécifier l'axe égal à
1
à déplacer lignes, sinon c'est la suppression de colonnes:df.dropna(axis=1)
. Aussi, voir ceci: stackoverflow.com/questions/17477979/...OriginalL'auteur Alexander
Au lieu d'abandonner les lignes qui contiennent des valeurs nulles et nombre infini, il est plus succinct, à l'inverse de la logique de cela et au lieu de regagner les lignes où toutes les cellules sont finis numéros. Le numpy isfinite de la fonction, et le".tous(1) " ne renvoient une valeur TRUE si tous cellules de la rangée sont finis.
OriginalL'auteur DougR
OriginalL'auteur Maria Wollestonecraft