【问题标题】:write lists to pandas dataframe to csv, read dataframe from csv and convert to lists again without having strings将列表写入 pandas 数据帧到 csv,从 csv 读取数据帧并再次转换为列表而无需字符串
【发布时间】:2018-06-23 09:01:22
【问题描述】:

最初我有一个列表列表,每个列表都包含字符串元组(来自一些计算)。我想保存它们以备后用,因此我不必再次进行所有计算,只需读取 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)

但问题是一样的。 那么如何去掉多余的“'”呢?

【问题讨论】:

    标签: python string list pandas csv


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 2020-06-10
      • 2023-01-21
      • 2020-08-25
      • 1970-01-01
      • 2023-02-21
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多