[PYTHON] Beurteilung von NaN durch Pandas: Wenn Str-Typ und Float-Typ gemischt werden

Ich war ein wenig süchtig nach dem Umgang mit NaN in Pandas, also machen Sie sich eine Notiz. Wenn Sie mit einer Mischung der Typen "str" und "float" arbeiten, verwenden Sie "pd.isnull ()" anstelle von "math.isnan ()" und "np.isnan ()".

Lesen Sie zuerst die Daten.

read_csv.py


import pandas as pd
import numpy as np
import math

data = pd.read_csv('test.csv', encoding='utf-8')

data sieht so aus.

hoge foo
0 0 NaN
1 a 1.0
2 NaN b

Ich möchte NaN in Spalte 'hoge' durch die Zeichenfolge 'No data' ersetzen.

Untersuchen Sie den Datentyp

type.py


for i in range(len(data)):
    print(type(data['hoge'][i]))

result


<class 'str'>
<class 'str'>
<class 'float'>

Das Ergebnis ist wie folgt. Nur NaN ist vom Typ "float".

hoge foo
0 str float
1 str str
2 float str

math.isnan() math.isnan () kann nicht für den Typ str verwendet werden.

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 () kann auch nicht für den Typ str verwendet werden.

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 () wird für NaN True.

pd_isnull.py


print(pd.isnull(data['hoge'][2]))

result


True

Wenn Sie versuchen, NaN durch "pd.isnull ()" für die Spalte "hoge" zu ersetzen, die eine Mischung aus "str" und "float" ist, wird sie bestanden.

pd_isnull.py


for i in range(len(data)):
    if pd.isnull(data['hoge'][i]) == True:
        data['hoge'][i] = 'No data'

Das NaN in Spalte "Hoge" wurde ersetzt.

hoge foo
0 0 NaN
1 a 1.0
2 No data b

Recommended Posts

Beurteilung von NaN durch Pandas: Wenn Str-Typ und Float-Typ gemischt werden
Der Header ist falsch ausgerichtet mit read_csv () und read_table () von Pandas
"Typfehler: Nicht erkannter Werttyp: <class'str '>" in to_datetime von Pandas
Verhalten, wenn mehrere Server in Nameservern von dnspython angegeben sind
Vorsichtsmaßnahmen beim Ändern der Unix-Zeit in Datetime-Typ in Pandas