最初我有一个列表列表,每个列表都包含字符串元组(来自某些计算)。我想稍后保存它们,所以我不必再次进行所有计算,只需阅读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)
但问题是一样的。 那我怎么能摆脱额外的" ' "
答案 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')