如何从存储在多个嵌套词典中的数据创建熊猫框架?

时间:2019-12-13 15:02:40

标签: python pandas

我有一个Python程序,在其中扫描多个参数,并在每个点计算一些结果。然后,我想以CSV(或Excel)报告的形式导出结果,该报告的每一行均包含参数和结果。例如,在这里我扫描两个参数ij并根据res1res2来计算ij。 (尽管这完全是愚蠢的MWE!)

res1 = dict()
res2 = dict()

for i in range(5):
    res1[i] = dict()
    res2[i] = dict()
    for j in range(5):
        res1[i][j] = i+j
        res2[i][j] = i*j

我想创建一个包含25行和4列的CSV,其中前两列是(i, j)组合,为此计算了res1res2,后两列是{{ 1}}和res1。导出此类CSV的一种简单方法如下:

res2

我想知道是否可以通过字典创建#### Naive CSV writing print(', '.join(['i', 'j', 'res1', 'res2'])) for i in range(5): for j in range(5): print(', '.join([str(i), str(j), str(res1[i][j]), str(res2[i][j])])) 框架,以便我可以更轻松地导出报告?

我知道pandas构造函数接受一个字典,该字典将列标题映射到列值。因此,例如,以下是可能的解决方案:

pandas.DataFrame

但是,上面的内容看起来并不那么优雅(我认为效率也不高)。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以创建普通列表

data = []
for i in range(5):
    for j in range(5):
        data.append([i, j, res1[i][j], res2[i][j]])

然后转换为DataFrame

import pandas as pd

df = pd.DataFrame(data, columns=['i', 'j', 'res1', 'res2'])

print(df)

或使用csv模块直接编写

import csv

fh = open("output.csv", 'w')
csvwriter = cvs.writer(fh)

csvwriter.writerow(['i', 'j', 'res1', 'res2'])

for i in range(5):
    for j in range(5):
        csvwriter.writerow([i, j, res1[i][j], res2[i][j]])

fh.close()

答案 1 :(得分:0)

如何?

import pandas as pd
from itertools import product
p = np.array(list(product(range(5), range(5))))

df = pd.DataFrame(data={'i': p[:,0], 'j':p[:,1]})

def res(row):
    row['res1'] = res1(row['i'], row['j'])
    row['res2'] = res2(row['i'], row['j'])

    return row

df = df.apply(res, axis=1)

现在您可以将数据帧直接写入csv