Pandas DataFrame gespeicherte Liste als String: Wie konvertiert man zurück in die Liste?
Ich habe eine n-von-m Pandas DataFrame df
wie folgt definiert. (Ich weiß, das ist nicht der beste Weg, es zu tun. Macht es Sinn, für das, was ich versuche zu tun, in meinem eigentlichen code, aber das wäre TMI für diesen Beitrag so einfach nehmen Sie mein Wort, dass dieser Ansatz funktioniert in meinem speziellen Szenario.)
>>> df = DataFrame(columns=['col1'])
>>> df.append(Series([None]), ignore_index=True)
>>> df
Empty DataFrame
Columns: [col1]
Index: []
Ich die gespeicherten Listen in den Zellen dieser DataFrame wie folgt.
>>> df['column1'][0] = [1.23, 2.34]
>>> df
col1
0 [1, 2]
Aus irgendeinem Grund, das DataFrame gespeichert, diese Liste als einen string statt einer Liste.
>>> df['column1'][0]
'[1.23, 2.34]'
Ich habe 2 Fragen für Sie.
- Warum hat der DataFrame speichern Sie eine Liste als string und gibt es eine Möglichkeit, um dieses Verhalten?
- Wenn nicht, dann ist es ein Pythonic way konvertieren Sie diesen string in eine Liste?
Update
Den DataFrame ich mit hatte, wurde gespeichert und geladen werden aus einer CSV-format. Dieses format, anstatt das DataFrame selbst, konvertiert die Liste aus einem string ein literal.
InformationsquelleAutor der Frage Gyan Veda | 2014-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie gesagt, dies kann Häufig passieren, wenn beim speichern und laden von pandas DataFrames als
.csv
Dateien, was ist ein text-format.In Ihrem Fall geschah dies, weil die Liste der Objekte, die eine string-Darstellung, so dass Sie gespeichert werden, wie
.csv
- Dateien. Laden der.csv
wird sich dann ergeben, dass die string-Darstellung.Wenn Sie möchten, speichern die eigentlichen Objekte, sollten Sie Sie verwenden
DataFrame.to_pickle()
(Hinweis: die Objekte müssen picklable!).Zur Beantwortung Ihrer zweiten Frage, können Sie wandeln es wieder mit
ast.literal_eval
:InformationsquelleAutor der Antwort Alex Thornton
Ich kam gerade über diesem problem und es gibt eine sehr einfache Lösung (pandas.eval()). Ich bin mit pandas 0.20.0.
InformationsquelleAutor der Antwort pshep123
nur als Referenz... pandas nicht konvertieren Liste in einen string. ..
InformationsquelleAutor der Antwort namit
1) Es ist ein Weg, um dieses Verhalten. Verwenden loc hilft hier.
2) Pythonic way konvertieren Sie diesen string in eine Liste. (Das ist wahrscheinlich das, was Sie wollen, da der DataFrame Sie mit hatte, wurde gespeichert und geladen werden aus einer CSV-format, es gibt ein paar Lösungen für dieses). Dies ist eine Ergänzung, die auf pshep123 Antwort.
InformationsquelleAutor der Antwort Michael James Kali Galarnyk
Ich hatte das gleiche problem. Beim speichern einer dataframe Liste Spalte einer CSV-Datei mit df.to_csv(), Liste Spalten in einen string umgewandelt werden, z.B. "[42, 42, 42]" statt [42, 42, 42]
Alex Antwort korrekt ist und können Sie
literal_eval
konvertieren Sie die Zeichenfolge wieder in eine Liste. Das problem bei diesem Ansatz ist, dass Sie importieren müssen Sie eine zusätzliche Bibliothek, und Sie brauchen, um zu übernehmen oder anzeigen die Funktion zum dataframe. Als einfacher Weg ist, um Kraft Pandas Lesen Sie die Spalte als Python-Objekt (dtype)df["col1"].astype('O')
O ist für Python-Objekte, einschließlich der Listen. Mehr info hier. Bitte beachten Sie, dass diese Methode schlägt fehl, wenn Sie analysieren leere Liste von strings: "[]"
Alternativ können Sie auch eine Funktion, um die Spalte (das ist für Ganzzahlen):
InformationsquelleAutor der Antwort Rutger Hofste