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