4

我有一个数据框,其中包含一个具有列表的列。当我将数据框写入文件然后重新打开它时,我最终将列表转换为字符串。有没有办法安全地读取/写入以列表为成员的数据帧?

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')

#note how the list (df1) has been converted to a string (df2)
df1['a'][0]
['john quincy', 'tom jones', 'jerry rice']

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

2 回答 2

2

不需要首先将列表转换为字符串,列表将自动转换为字符串。只需编写包含列表的数据框,然后ast.literal_eval使用df2

                                             a  b  c
0   ['john quincy', 'tom jones', 'jerry rice']  9  7
1  ['bob smith', 'sally ride', 'little wayne']  2  3
2                   ['seven', 'eight', 'nine']  4  0
3                  ['ten', 'eleven', 'twelve']  5  9

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

用于ast.literal_eval将字符串返回到列表:

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

输出:

list
于 2012-11-01T20:15:04.673 回答
1

问题在这里:

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

在哪里f = lambda x : ','.join(x)

再次加入没有意义,您想将其拆分为列表:

df2['a'] = df2['a'].map(lambda L: L.split(','))
于 2012-11-01T20:03:42.460 回答