J'étais un peu accro au traitement de NaN chez les pandas, alors prenez note.
Lorsque vous traitez avec un mélange de types str
et float
, utilisezpd.isnull ()
au lieu demath.isnan ()
etnp.isnan ()
.
Tout d'abord, lisez les données.
read_csv.py
import pandas as pd
import numpy as np
import math
data = pd.read_csv('test.csv', encoding='utf-8')
data
ressemble à ceci.
hoge | foo | |
---|---|---|
0 | 0 | NaN |
1 | a | 1.0 |
2 | NaN | b |
Je veux remplacer NaN dans la colonne «oge »par la chaîne« Aucune donnée ».
type.py
for i in range(len(data)):
print(type(data['hoge'][i]))
result
<class 'str'>
<class 'str'>
<class 'float'>
Le résultat est le suivant. Seul NaN est de type «float».
hoge | foo | |
---|---|---|
0 | str | float |
1 | str | str |
2 | float | str |
math.isnan()
math.isnan ()
ne peut pas être utilisé pour le type str
.
math_isnan.py
for i in range(len(data)):
if math.isnan(data['hoge'][i]) == True:
data['hoge'][i] = 'No data'
result
TypeError: must be real number, not str
np.isnan()
np.isnan ()
ne peut pas non plus être utilisé pour le type str
.
np_isnan.py
for i in range(len(data)):
if np.isnan(data['hoge'][i]) == True:
data['hoge'][i] = 'No data'
result
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
pd.isnull()
pd.isnull ()
devient True
pour NaN.
pd_isnull.py
print(pd.isnull(data['hoge'][2]))
result
True
Si vous essayez de remplacer NaN par pd.isnull ()
pour la colonne'hoge ', qui est un mélange de type str
et de type float
, cela passera.
pd_isnull.py
for i in range(len(data)):
if pd.isnull(data['hoge'][i]) == True:
data['hoge'][i] = 'No data'
Le NaN de la colonne «hoge» a été remplacé.
hoge | foo | |
---|---|---|
0 | 0 | NaN |
1 | a | 1.0 |
2 | No data | b |
Recommended Posts