将列表写入pandas dataframe到csv,从csv读取数据帧并再次转换为列表而不需要字符串

时间:2018-01-14 15:15:32

标签: python string list pandas csv

最初我有一个列表列表,每个列表都包含字符串元组(来自某些计算)。我想稍后保存它们,所以我不必再次进行所有计算,只需阅读csv。

 L = [l1,l2,...]
 l1 = [('a','b'), ('c','d'),...]
 l2 = [('e','f'), ('g','h'),...]...

我将它转换为pandas数据框:

 import pandas as pd
 df = pd.DataFrame(L)
 df.to_csv('MyLists.csv', sep=";")

因此每个列表l都在csv中保存为一行。 一段时间后,我想再次使用csv中保存的列表。 所以我再次进口大熊猫并做了:

readdf = pd.read_csv('MyLists.csv', delimiter = ";")
newList = readdf.values.tolist()

问题是现在每个元组都是一个字符串,即newList中的每个列表如下所示:

l1 = ['('a','b')', '('c', 'd')',...]

当我使用文本编辑器查看csv时,它看起来是正确的,不知怎的样:

('a','b');('c','d');... 

我尝试直接阅读:

import csv

newList = []
with open('MyLists.csv') as f:    
    reader = csv.reader(f, delimiter=";")
    for row in reader:
        newList.append(row)

但问题是一样的。 那我怎么能摆脱额外的" ' "

1 个答案:

答案 0 :(得分:0)

我认为您需要将string转换为tuples,因为csv中的数据为string s:

import ast

l1 = [('a','b'), ('c','d')]
l2 = [('e','f'), ('g','h')]
L = [l1,l2]

df = pd.DataFrame(L)
print (df)
        0       1
0  (a, b)  (c, d)
1  (e, f)  (g, h)

df.to_csv('MyLists.csv', sep=";")

readdf = pd.read_csv('MyLists.csv', delimiter = ";", index_col=0)
newList = readdf.applymap(ast.literal_eval).values.tolist()
print (newList)
[[('a', 'b'), ('c', 'd')], [('e', 'f'), ('g', 'h')]]

但我认为最好使用pickle来保存您的数据 - 使用to_pickle / read_pickle

df.to_pickle('MyLists.pkl')