Problem beim Konvertieren der von Pandas gelesenen Daten in eine Liste

Inhaltsverzeichnis

Die Einführung des Problems

Abbildung 1

Figur 2

Bild 3

denken

Figur 4

Abbildung 5

lösen

Abbildung 6


Die Einführung des Problems

Schauen Sie sich zunächst den Inhalt der CSV-Datei an, wie in Abbildung 1 dargestellt

Abbildung 1

Es ist ersichtlich, dass die Spalte „b“ in der CSV-Datei sowohl den Typ int als auch den Typ float hat.

Schauen wir uns zunächst einen Code an.

from pandas import read_csv
df=read_csv('test.csv')
print(df)

Der Ausdruck ist in Abbildung 1 dargestellt.

Figur 2

Wie aus Abbildung 2 ersichtlich ist, haben die Daten in Spalte „b“ nur den Typ float und keinen int-Typ. Konvertieren Sie dann das DataFrame-Objekt in ein Listenobjekt. Der Code lautet wie folgt

from pandas import read_csv
df=read_csv('test.csv')
df_list=df.values.tolist()
print(df_list)

Das Druckergebnis ist in Abbildung 3 dargestellt

Bild 3

Wie aus Abbildung 3 ersichtlich ist, sind alle Zahlen zu Float-Typen geworden. Hier liegt ein Problem vor. Das Problem besteht darin, dass der Datentyp falsch ist. Die dritte Spalte ist vom Typ int, aber wenn sie in ndarray konvertiert wird, wird sie zu einem Float-Typ. Beim Lesen der CSV-Datei muss natürlich auch der Typ konvertiert werden. Auf dieses Problem wird hier nicht eingegangen.

denken

Aus dem Quellcode können wir ersehen, dass der Rückgabewert vom Typ „ndarray“ des Attributs „values“ in Abbildung 4 dargestellt ist.

Figur 4

Schauen Sie sich dann den Codeausschnitt an.

import numpy as np
arr=np.array([[1.0,2],[2,3]])
print(arr)

Das Druckergebnis ist in Abbildung 5 dargestellt

Abbildung 5

Aus Abbildung 5 und dem vorherigen Code können wir kühn eine Schlussfolgerung ableiten: Wenn ein Datentyp, der in ndarray konvertiert werden kann, Float-Daten enthält, ohne eine Typkonvertierung zu erzwingen, wird der Datentyp des gesamten ndarray in float konvertiert.

Obwohl die Konvertierung eines DataFrame-Objekts in eine Liste über das Values-Attribut und die Tolist-Methode schnell ist und nur eine Codezeile erfordert, wird die Konvertierung anderer Spalten erzwungen, wenn in den gesamten DataFrame-Objektdaten ein Float-Typ vorhanden ist .

lösen

Daher glaubt der Autor, dass es ein Problem mit den Werten „Attribut“ dieses DataFrames gibt. Natürlich kann es verwendet werden.

Der Autor hat keine perfekte Lösung gefunden, daher habe ich eine umständlichere Methode verwendet. Code wird wie folgt angezeigt.

from pandas import read_csv
from pandas.core.frame import DataFrame
def DataFrame2list(df:DataFrame)->list:
    df_list=[]
    for row in range(df.shape[0]):  # df.shape[0] 获得总行数
        col_list=[]
        for col in range(df.shape[1]):  # df.shape[1] 获得总列数
            col_list.append(df.iat[row,col])  # iat 一个一个取值
        df_list.append(col_list)
    return df_list
df=read_csv('test.csv')
df_list=DataFrame2list(df)
print(df_list)

Der obige Code ist eine sekundäre Schleife, was ziemlich problematisch ist. Wenn jemand andere Möglichkeiten zur Lösung dieses Problems kennt, können Sie eine Nachricht im Kommentarbereich hinterlassen. Das Druckergebnis ist in Abbildung 6 dargestellt.

Abbildung 6

Ich denke du magst

Origin blog.csdn.net/qq_63401240/article/details/132769531
Empfohlen
Rangfolge