[PYTHON] Pandas Memo ~ Keine, np.nan, über leere Zeichen ~

Pandas Memo ~ Keine, np.nan, über leere Zeichen ~

Ich war süchtig nach None, np.nan von Pandas, also persönlichen Notizen

Die verifizierte Umgebung ist wie folgt (es gab keinen Unterschied in den Ergebnissen)

Zusammenfassung

None np.nan Leerer Charakter
DataFrame-Konvertierung np außer wenn für dtype kein Objekt angegeben ist.In Nan umgewandelt np.np weil nan nicht in int umgewandelt werden kann.Säulen, die nan enthalten, sind grundsätzlich Float-Säulen Zeichentyp(Nicht numerisch)Da es als behandelt wird, wird es nicht als fehlender Wert behandelt, und die Spalte mit leeren Zeichen wird zum grundlegenden Objekttyp.
read_csv - Np unabhängig davon, welcher dtype für leere und leere Zeichen in csv angegeben ist.Lesen Sie als nan -
fillna, fropna Als fehlender Wert beurteilt Als fehlender Wert beurteilt Nicht als fehlender Wert beurteilt
groupby Als fehlender Wert beurteilt und ignoriert Als fehlender Wert beurteilt und ignoriert Nicht als fehlender Wert beurteilt

Prüfergebnis

DataFrame-Konvertierung durch Angabe von dtype

Überprüfung, wie sich der Spaltentyp ändert, wenn die folgenden Daten mit unterschiedlichen dtypes angegeben werden


df = pd.DataFrame(
    {
        #Zeile A.: int+None
        "A": [1, 2, 3, None],
        #Spalte B.: str+Leerer Charakter
        "B": ["1", "2", "3", ""],
        #Spalte C.: int+np.nan
        "C": [1, 2, 3, np.nan],
        #Spalte D.:nur int
        "D": [1, 2, 3, 4]
    }
)

dtype nicht angegeben

Keiner scheint in np.nan konvertiert zu sein ... Außerdem wird die Spalte mit np.nan zu float64


df = pd.DataFrame(
    {
        "A": [1, 2, 3, None],
        "B": ["1", "2", "3", ""],
        "C": [1, 2, 3, np.nan],
        "D": [1, 2, 3, 4]
    }
)

print(df)

     A  B    C  D
0  1.0  1  1.0  1
1  2.0  2  2.0  2
2  3.0  3  3.0  3
3  NaN     NaN  4

print(df.dtypes)

A    float64
B     object
C    float64
D      int64
dtype: object

print(df.values)

array([[1.0, '1', 1.0, 1],
       [2.0, '2', 2.0, 2],
       [3.0, '3', 3.0, 3],
       [nan, '', nan, 4]], dtype=object)

Objekt angeben

Alle Werte haben sich nicht geändert. Keiner bleibt unverändert


df = pd.DataFrame(
    {
        "A": [1, 2, 3, None],
        "B": ["1", "2", "3", ""],
        "C": [1, 2, 3, np.nan],
        "D": [1, 2, 3, 4]
    },
    dtype=object
)

print(df)

      A  B    C  D
0     1  1    1  1
1     2  2    2  2
2     3  3    3  3
3  None     NaN  4

print(df.dtypes)

A    object
B    object
C    object
D    object
dtype: object

print(df.values)

array([[1, '1', 1, 1],
       [2, '2', 2, 2],
       [3, '3', 3, 3],
       [None, '', nan, 4]], dtype=object)

Geben Sie float an

Leere Zeichen können nicht in Float geändert werden. Nur Spalten mit leeren Zeichen werden zum Objekttyp


df = pd.DataFrame(
    {
        "A": [1, 2, 3, None],
        "B": ["1", "2", "3", ""],
        "C": [1, 2, 3, np.nan],
        "D": [1, 2, 3, 4]
    },
    dtype=float
)

print(df)

      A  B    C  D
0     1  1    1  1
1     2  2    2  2
2     3  3    3  3
3  None     NaN  4

print(df.dtypes)

A    float64
B     object
C    float64
D    float64
dtype: object

print(df.values)

array([[1.0, '1', 1.0, 1.0],
       [2.0, '2', 2.0, 2.0],
       [3.0, '3', 3.0, 3.0],
       [nan, '', nan, 4.0]], dtype=object)

Geben Sie int an

Spalten, die nicht in int64 konvertiert werden können (Spalten, die np.nan oder None enthalten), sind vom Typ Objekt


df = pd.DataFrame(
    {
        "A": [1, 2, 3, None],
        "B": ["1", "2", "3", ""],
        "C": [1, 2, 3, np.nan],
        "D": [1, 2, 3, 4]
    },
    dtype=int
)

print(df)

      A  B    C  D
0     1  1    1  1
1     2  2    2  2
2     3  3    3  3
3  None     NaN  4

print(df.dtypes)

A    object
B    object
C    object
D     int64
dtype: object

print(df.values)

array([[1, '1', 1, 1],
       [2, '2', 2, 2],
       [3, '3', 3, 3],
       [None, '', nan, 4]], dtype=object)

read_csv mit angegebenem dtype

Überprüfen Sie, was mit dem Spaltentyp passiert, wenn die folgende CSV mit unterschiedlichen dtypes angegeben wird

sample.csv


#Zeile A.: int+Himmel
#Spalte B.:String+Leerer Charakter
#Spalte C.: float+Himmel
#Spalte D.:nur int
A,B,C,D
1,"1",1.0,1
2,"2",2.0,2
3,"3",3.0,3
,"",,4

dtype nicht angegeben

Sowohl leere als auch leere Zeichen werden als np.nan gelesen und int wird entsprechend in float konvertiert.


df = pd.read_csv("sample.csv")

print(df)

     A    B    C  D
0  1.0  1.0  1.0  1
1  2.0  2.0  2.0  2
2  3.0  3.0  3.0  3
3  NaN  NaN  NaN  4

print(df.dtypes)

A    float64
B    float64
C    float64
D      int64
dtype: object

print(df.values)

array([[ 1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.],
       [nan, nan, nan,  4.]])

Objekt angeben

Leere und leere Zeichen werden in np.nan konvertiert, andere Werte werden jedoch in den Typ str konvertiert


df = pd.read_csv("sample.csv", dtype=object)

print(df)

     A    B    C  D
0    1    1  1.0  1
1    2    2  2.0  2
2    3    3  3.0  3
3  NaN  NaN  NaN  4

print(df.dtypes)

A    object
B    object
C    object
D    object
dtype: object

print(df.values)

array([['1', '1', '1.0', '1'],
       ['2', '2', '2.0', '2'],
       ['3', '3', '3.0', '3'],
       [nan, nan, nan, '4']], dtype=object)

Geben Sie float an

Alle Spalten werden in den Typ float64 konvertiert


df = pd.read_csv("sample.csv", dtype=float)

print(df)

     A    B    C    D
0  1.0  1.0  1.0  1.0
1  2.0  2.0  2.0  2.0
2  3.0  3.0  3.0  3.0
3  NaN  NaN  NaN  4.0

print(df.dtypes)

A    float64
B    float64
C    float64
D    float64
dtype: object

print(df.values)

array([[ 1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.],
       [nan, nan, nan,  4.]])

Geben Sie int an

Da leere und leere Zeichen in np.nan konvertiert werden, können sie nicht als int gelesen werden und es tritt ein Fehler auf.


df = pd.read_csv("sample.csv", dtype=int)

ValueError: Integer column has NA values in column 0

Verhalten bei Fillna und Dropna

Verhalten beim Ausfüllen der folgenden Daten


df = pd.DataFrame(
    {
        #Zeile A.: int+None
        "A": [1, 2, 3, None],
        #Spalte B.: str+Leerer Charakter
        "B": ["1", "2", "3", ""],
        #Spalte C.: int+np.nan
        "C": [1, 2, 3, np.nan],
        #Spalte D.:nur int
        "D": [1, 2, 3, 4]
    },
    dtype="object"
)

print(df.values)

array([[1, '1', 1, 1],
       [2, '2', 2, 2],
       [3, '3', 3, 3],
       [None, '', nan, 4]], dtype=object)

Wenn Sie "df.fillna (" FILL ")" ausführen, werden die Werte "None" und "np.nan" konvertiert, die leeren Zeichen bleiben jedoch erhalten.


print(df.fillna('FILL'))

      A  B     C  D
0     1  1     1  1
1     2  2     2  2
2     3  3     3  3
3  FILL     FILL  4

print(df.fillna('FILL').values)

array([[1, '1', 1, 1],
       [2, '2', 2, 2],
       [3, '3', 3, 3],
       ['FILL', '', 'FILL', 4]], dtype=object)

In ähnlicher Weise besteht das Verhalten zum Zeitpunkt von dropna darin, dass die Zeilen und Spalten, die np.nan und None enthalten, gelöscht werden, leere Zeichen jedoch nicht als fehlende Werte behandelt werden.


print(df.dropna(axis=1))

   B  D
0  1  1
1  2  2
2  3  3
3     4

print(df.dropna(axis=1).values)

array([['1', 1],
       ['2', 2],
       ['3', 3],
       ['', 4]], dtype=object)

Verhalten beim Gruppieren nach

Führen Sie die Überprüfung mit dem folgenden Datenrahmen durch


df = pd.DataFrame(
    {
        #Zeile A.: int+None
        "A": [1, 2, 3, None],
        #Spalte B.: str+Leerer Charakter
        "B": ["1", "2", "3", ""],
        #Spalte C.: int+np.nan
        "C": [1, 2, 3, np.nan],
        #Spalte D.:nur int
        "D": [1, 2, 3, 4]
    },
    dtype="object"
)

Bei der Gruppierung in einer Spalte mit None, np.nan werden die Zeilen None, np.nan ignoriert (fehlen).


print(df.groupby("A").max().reset_index())

   A  B  C  D
0  1  1  1  1
1  2  2  2  2
2  3  3  3  3

print(df.groupby("A").max().reset_index().values)

array([[1, '1', 1, 1],
       [2, '2', 2, 2],
       [3, '3', 3, 3]], dtype=object)

print(df.groupby("C").max().reset_index())

   C  A  B  D
0  1  1  1  1
1  2  2  2  2
2  3  3  3  3

print(df.groupby("C").max().reset_index().values)

array([[1, 1, '1', 1],
       [2, 2, '2', 2],
       [3, 3, '3', 3]], dtype=object)

Wenn die Spalte leere Zeichen enthält, wird sie nicht ignoriert


print(df.groupby("B").max().reset_index())

   B    A    C  D
0     NaN  NaN  4
1  1  1.0  1.0  1
2  2  2.0  2.0  2
3  3  3.0  3.0  3

print(df.groupby("B").max().reset_index().values)

array([[1, 1, '1', 1],
       [2, 2, '2', 2],
       [3, 3, '3', 3]], dtype=object)

Recommended Posts

Pandas Memo ~ Keine, np.nan, über leere Zeichen ~
Pandas Memo
Pandas Memo
Pandas Reverse Memo
8rep --Pandas String Löschcode
Visualisierungsnotiz von Pandas, Seaborn