Jugement de NaN par les pandas: lorsque le type str et le type float sont mélangés

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 ».

Examiner le type de données

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

Jugement de NaN par les pandas: lorsque le type str et le type float sont mélangés
L'en-tête est mal aligné avec read_csv () et read_table () de Pandas
"Erreur de type: type de valeur non reconnu: <class'str '>" dans to_datetime des pandas
Comportement lorsque plusieurs serveurs sont spécifiés dans les serveurs de noms de dnspython
Précautions lors du changement d'heure Unix en type datetime dans les pandas