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

标签 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 中的列表。 所以我再次导入 pandas 并做了:

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)

但问题是一样的。 那么我怎样才能摆脱多余的“'”呢?

最佳答案

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

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

关于python - 将列表写入 pandas 数据帧到 csv,从 csv 读取数据帧并再次转换为列表而无需字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250995/

相关文章:

c++ - 如何对大型文本文件运行字典搜索?

python - 从文本文件中解析项目

python - 将列表与 python 多处理一起使用

list - 在 Haskell 元组列表上压缩相同的值

Python Flask 将表单数据保存到数据库

python - 如何加快大字典的迭代速度

c - 使用strtod后如何将double值转换为char数组?在C中

python - 如何按数字拆分列表列表?

Python 包目录

python - 如何禁用查询缓存?