4 Stimmen

Liste in Zeichenfolge in df.to-csv() umwandeln

Ich habe ein DataFrame, das eine Spalte mit einer Liste enthält. Wenn ich das DataFrame in eine Datei schreibe und dann wieder öffne, wird die Liste in einen String umgewandelt. Gibt es einen sicheren Weg, Datenrahmen zu lesen/schreiben, die Listen als Elemente haben?

df1 = DataFrame({'a':[['john quincy', 'tom jones', 'jerry rice'],['bob smith','sally ride','little wayne'],['seven','eight','nine'],['ten','eleven','twelve']],'b':[9,2,4,5], 'c': [7,3,0,9]})

df1.to_csv('temp.csv')
df2 = read_csv('temp.csv')

#beachten Sie, wie die Liste (df1) in einen String umgewandelt wurde (df2)
df1['a'][0]
['john quincy', 'tom jones', 'jerry rice']

df2['a'][0]
"['john quincy', 'tom jones', 'jerry rice']"

2voto

root Punkte 73542

Es ist nicht notwendig, die Liste zunächst in einen String umzuwandeln, da Listen automatisch in einen String umgewandelt werden. Schreiben Sie einfach das DataFrame, das eine Liste enthält, und verwenden Sie ast.literal_eval auf df2

                                             a  b  c
0   ['john quincy', 'tom jones', 'jerry rice']  9  7
1  ['bob smith', 'sally ride', 'little wayne']  2  3
2                   ['sieben', 'acht', 'neun']  4  0
3                  ['zehn', 'elf', 'zwölf']  5  9

df1.to_csv('temp.csv')
df2 = read_csv('temp.csv')

Verwenden Sie ast.literal_eval, um den String zurück in eine Liste zu verwandeln:

import ast
fd2['a']=df2['a'].apply(lambda x: ast.literal_eval(x))
type(df2['a'][1])

Ausgabe:

list

1voto

Jon Clements Punkte 134241

Das Problem liegt hier:

df2['a'] =df2['a'].map(f)
                   ^^^^^^

Wobei f = lambda x : ','.join(x)

Es macht keinen Sinn, es erneut zu verbinden, du möchtest es in eine Liste aufteilen:

df2['a'] = df2['a'].map(lambda L: L.split(','))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X