【问题标题】:How to write grid in csv file in python如何在python中的csv文件中写入网格
【发布时间】:2020-10-17 03:45:13
【问题描述】:

我有一个元组列表。每个元组包含 2 个值,以及两个值之间的运算结果。这是一个例子:

my_list = [(1,1,1.0), (1,2,0.8), (1,3,0.3), (2,1,0.8), (2,2,1.0), (2,3,0.5), (3,1,0.3), (3,2,0.5), (3,3,1.0)]

我需要将此值存储在 csv 文件中,以便它们看起来像这样:

0    1     2     3
1    1    0.8   0.3
2   0.8    1    0.5
3   0.3   0.5    1

换句话说,每次元组的第一个数字发生变化时,我都需要去一个新行。

这是我目前正在使用的函数,它将每个元组写入一个新行(不是我想要的):

def write_csv(my_list, fname = ''):
    with open (fname, mode='a+') as f:
        f_writer = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        for x in my_list:
            f_writer.writerow([str(x[0]), str(x[1]), str(x[2])])

关于如何修改(从头开始重写)的任何建议?

【问题讨论】:

    标签: python csv write


    【解决方案1】:

    您可以结合使用 Numpy 和 Pandas Python 库。

    import pandas as pd
    import numpy as np
    
    my_list = [(1,1,1.0), (1,2,0.8), (1,3,0.3), (2,1,0.8), (2,2,1.0), (2,3,0.5), (3,1,0.3), (3,2,0.5), (3,3,1.0)]
    
    new_list = [cell[2] for cell in my_list] # Extract cell values
    np_array = np.array(new_list).reshape(3,3) # Create 3x3 matrix
    df = pd.DataFrame(np_array) # Create a dataframe
    df.to_csv("test.csv") # Write to a csv
    
    

    为清楚起见,数据框如下所示:

    df
         0    1    2
    0  1.0  0.8  0.3
    1  0.8  1.0  0.5
    2  0.3  0.5  1.0
    

    csv 文件将如下所示:

    ,0,1,2
    0,1.0,0.8,0.3
    1,0.8,1.0,0.5
    2,0.3,0.5,1.0
    

    【讨论】:

    • 感谢您的建议。我会试一试。有什么办法可以让矩阵从 1 而不是 0 开始?
    • @ginopino 你可以使用df.index += 1df.columns += 1 将行和列增加1。
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多