【问题标题】:How to make a dataframe from a list of strings?如何从字符串列表制作数据框?
【发布时间】:2022-11-13 14:50:40
【问题描述】:

我有多个文件 .csv,其中包含训练/验证过程的结果。每个模型一个文件。文件中的每一行都包含以下信息:Epoch,loss_train,acc_train,loss_val,acc_val,time。每个文件名都包含有关模型参数的信息。

我需要构建一个包含每个文件的最后一行和文件名的数据框。 在 Python 中使用readlines(),我设法获得了包含所需信息的字符串列表。列表部分示例:

'"0_0_2_200_0.4.csv",66,67,0.42319968342781067,0.8733666720438781,0.9848468899726868,0.7532656023222061,0.2503340244293213\n', '"0_0_2_200_0.5.csv",74,75,0.41233333945274353,0.8760283916760768,0.9206098318099976,0.7656023222060958,0.2535388469696045\n',

如何将此列表放入数据框中?

要将这个列表列表转换为数据框,我尝试了:

df = pd.DataFrame.from_records(results, columns = ["filename", "row_number", "Epoch", "loss_train", "acc_train","loss_val", "acc_val", "time"])

我有以下错误:ValueError:传递了 8 列,传递的数据有 124 列. 我试过了:

df2 = pd.DataFrame(results,
                   columns=["filename", "row_number", "Epoch", "loss_train", "acc_train","loss_val", "acc_val", "time"])

错误是:ValueError:传递值的形状为 (110, 1),索引暗示 (110, 8).

df3 = pd.DataFrame(results)

结果变成只有一列的数据框。 我试图将列表写入 csv 文件:

file = open('final_results.csv', 'w+', newline ='') 
with file:     
    write = csv.writer(file, delimiter=',') 
    write.writerows(results)

但在生成的文件中,所有字符都被分成不同的列:

"""",0,_,0,_,2,_,2,0,0,_,0,.,4,.,c,s,v,"""",",",6,6,",",6,7,",",0,.,4,2,3,1,9,9,6,8,3,4,2,7,8,1,0,6,7,",",0,.,8,7,3,3,6,6,6,7,2,0,4,3,8,7,8,1,",",0,.,9,8,4,8,4,6,8,8,9,9,7,2,6,8,6,8,",",0,.,7,5,3,2,6,5,6,0,2,3,2,2,2,0,6,1,",",0,.,2,5,0,3,3,4,0,2,4,4,2,9,3,2,1,3,"

【问题讨论】:

    标签: python pandas list dataframe export-to-csv


    【解决方案1】:

    使用您提供的字符串列表:

    results = [
        '"0_0_2_200_0.4.csv",66,67,0.42319968342781067,0.8733666720438781,0.9848468899726868,0.7532656023222061,0.2503340244293213
    ',
        '"0_0_2_200_0.5.csv",74,75,0.41233333945274353,0.8760283916760768,0.9206098318099976,0.7656023222060958,0.2535388469696045
    ',
    ]
    

    这是使用 Python str.stripstr.split 的一种方法:

    import pandas as pd
    
    df = pd.DataFrame(
        [x.strip("
    ").split(",") for x in results],
        columns=[
            "filename",
            "row_number",
            "Epoch",
            "loss_train",
            "acc_train",
            "loss_val",
            "acc_val",
            "time",
        ],
    )
    

    然后:

                  filename row_number Epoch           loss_train  
    0  "0_0_2_200_0.4.csv"         66    67  0.42319968342781067   
    1  "0_0_2_200_0.5.csv"         74    75  0.41233333945274353   
    
                acc_train            loss_val             acc_val  
    0  0.8733666720438781  0.9848468899726868  0.7532656023222061   
    1  0.8760283916760768  0.9206098318099976  0.7656023222060958   
    
                     time  
    0  0.2503340244293213  
    1  0.2535388469696045
    

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2020-06-17
      • 2015-02-15
      • 1970-01-01
      相关资源
      最近更新 更多