【问题标题】:Writing each element of list in a tuple as a separate column of a csv将列表的每个元素写入元组中作为 csv 的单独列
【发布时间】:2021-05-29 18:48:54
【问题描述】:

我有一个数据结构,我想写入 1 行中的 csv 文件。 这是在下一次迭代运行时,它为我正在创建的 csv 的每个标题字段添加一个新行。

例如,我尝试写入 csv 的行如下所示。在这里,我希望列表的每个元素都放在单独的列中。意思是,4.1% 应该到第 2 列,11.5% 到第 3 列,依此类推。

rowdict = {tuple:4}

('Row 1 data', ['4.1%', '11.5%', '21.1%', '2.6%', '14.8%', '0.4%', '9.6%', '35.6%', '0.0%', '0.4%'], [11, 31, 57, 7, 40, 1, 26, 96, 0, 1], 270)

我的sn-p:

f = open(completeName + '.csv', 'a', newline='', encoding='utf-8')
    with f:
        # identifying header
        header = header_list
        writer = csv.DictWriter(f, fieldnames=header)
        # writing data row-wise into the csv file
        writer.writeheader()
        all_perce_val = ["{:.1%}".format(x) for x in all_fractions_list]
        for i in range(1,len(all_perce_val)):
            writer.writerow((str(os.path.split(os.path.split(directory)[0])[1]), all_perce_val, count_of_each_type, total_cycle_count))
    print("Finished writing the csv file at:"+completeName)

我正在努力弄清楚如何将我必须的多个列表传递给 writerow() 以便它以我需要的方式编写它们。

更新:我改变了方法并尝试使用数据框

data_row = []
    data_row.extend([str(os.path.split(os.path.split(directory)[0])[1])])
    data_row.extend(all_perce_val)
    data_row.extend(count_of_each_type)
    data_row.extend([total_cycle_count])
    final_data_row = [data_row]
    df_row = pd.DataFrame(data=final_data_row, columns=header).fillna('')
    mode = 'w' if header_flag else 'a'
    df_row.to_csv(completeName + '.csv', mode=mode, index=None)
    header_flag = False

但是,我想避免在每次循环迭代中编写列名。上面的 sn-p 正在苦苦挣扎。

【问题讨论】:

    标签: python python-3.x dataframe dictionary tuples


    【解决方案1】:

    writer.writerow 中使用之前,您应该先解压缩列表。

    >>> row=('Row 1 data', ['4.1%', '11.5%', '21.1%', '2.6%', '14.8%', '0.4%', '9.6%', '35.6%', '0.0%', '0.4%'], [11, 31, 57, 7, 40, 1, 26, 96, 0, 1], 270)
    >>> row=(row[0],*row[1],*row[2],row[3])
    >>> row
    ('Row 1 data', '4.1%', '11.5%', '21.1%', '2.6%', '14.8%', '0.4%', '9.6%', '35.6%', '0.0%', '0.4%', 11, 31, 57, 7, 40, 1, 26, 96, 0, 1, 270)
    

    现在你可以使用writer.writerow(row)

    【讨论】:

    • 谢谢。我切换到使用数据帧 to_csv 方法。您能在我的更新中帮助解决上述问题吗?
    • 好的,我为标题字段维护了一个标志,并且做到了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    相关资源
    最近更新 更多