如何从由循环n次迭代生成的n个字典的列表中生成数据帧?

时间:2019-04-11 15:03:06

标签: python list dataframe dictionary

我通过迭代一个函数n来生成一个列表字典。因此,作为d的结果,我有n个字典截然不同。这是d

 d = {'Insumos' : ["%s" % frame['DESCRIÇÃO'].unique()], 'Valor previsto' : ['%.2f' % y_pred_fut],
                      'MAPE' : [ '%.2f' % mean_absolute_percentage_error(y_mat_val, y_pred)], 
                      'MAE' : ['%.2f' %mean_absolute_error(y_mat_val, y_pred)], 'r2' : ['%.2f' %  r2_score(y_mat_val, y_pred)]}

这是n的{​​{1}}特定迭代的结果:

d

如果我应用{'Insumos': ["['ABUTILOM (ABUTILON STRIATUM)']"], 'Valor previsto': ['30.56'], 'MAPE': ['5.59'], 'MAE': ['1.60'], 'r2': ['-16.70']} {'Insumos': ["['ACALIFA (ACALYPHA WILKESIANA)']"], 'Valor previsto': ['31.22'], 'MAPE': ['3.24'], 'MAE': ['0.96'], 'r2': ['-2.24']} {'Insumos': ['[\'ACIONADOR MANUAL TIPO "QUEBRE O VIDRO"\']'], 'Valor previsto': ['72.52'], 'MAPE': ['4.76'], 'MAE': ['3.21'], 'r2': ['-17.48']} {'Insumos': ["['ADUBO QUÍMICO NPK, 10:10:10']"], 'Valor previsto': ['2.71'], 'MAPE': ['5.02'], 'MAE': ['0.12'], 'r2': ['0.41']} ,则会得到pd.DataFrame.from_records(d)个不同的数据帧,如下所示:

n

我想获得0 ['ABUTILOM (ABUTILON STRIATUM)'] 1.60 5.59 30.56 -16.70 Insumos MAE MAPE Valor previsto r2 0 ['ACALIFA (ACALYPHA WILKESIANA)'] 0.96 3.24 31.22 -2.24 Insumos ... r2 0 ['ACIONADOR MANUAL TIPO "QUEBRE O VIDRO"'] ... -17.48 [1 rows x 5 columns] Insumos MAE MAPE Valor previsto r2 0 ['ADUBO QUÍMICO NPK, 10:10:10'] 0.12 5.02 2.71 0.41 Insumos MAE MAPE Valor previsto r2 0 ['ALAMANDA (ALLAMANDA NERIIFOLIA)'] 2.13 7.03 32.93 -8.51 Insumos ... r2 0 ['ALVENARIA DE EMBASAMENTO - TIJOLOS MACIÇOS C... ... -1.83 [1 rows x 5 columns] . . . 的{​​{1}}次迭代产生的所有n个字典,并制作一个唯一的数据框。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您有字典,则需要使用from_dict而不是from_records

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.from_dict.html

如果您有多个输入字典,请将您的字典放入列表:

d = [
    {'Insumos': ["['ABUTILOM (ABUTILON STRIATUM)']"], 'Valor previsto': ['30.56'], 'MAPE': ['5.59'], 'MAE': ['1.60'], 'r2': ['-16.70']},
    {'Insumos': ["['ACALIFA (ACALYPHA WILKESIANA)']"], 'Valor previsto': ['31.22'], 'MAPE': ['3.24'], 'MAE': ['0.96'], 'r2': ['-2.24']},
    {'Insumos': ['[\'ACIONADOR MANUAL TIPO "QUEBRE O VIDRO"\']'], 'Valor previsto': ['72.52'], 'MAPE': ['4.76'], 'MAE': ['3.21'], 'r2': ['-17.48']},
    {'Insumos': ["['ADUBO QUÍMICO NPK, 10:10:10']"], 'Valor previsto': ['2.71'], 'MAPE': ['5.02'], 'MAE': ['0.12'], 'r2': ['0.41']},
]

然后我认为它应该按您的预期工作。

>>>>pd.DataFrame.from_records(d)
                                        Insumos     MAE    MAPE  \
 0            [['ABUTILOM (ABUTILON STRIATUM)']]  [1.60]  [5.59]
 1           [['ACALIFA (ACALYPHA WILKESIANA)']]  [0.96]  [3.24]
 2  [['ACIONADOR MANUAL TIPO "QUEBRE O VIDRO"']]  [3.21]  [4.76]
 3             [['ADUBO QU?MICO NPK, 10:10:10']]  [0.12]  [5.02]

  Valor previsto        r2
0        [30.56]  [-16.70]
1        [31.22]   [-2.24]
2        [72.52]  [-17.48]
3         [2.71]    [0.41]

答案 1 :(得分:1)

当您将一个d馈送到pd.DataFrame时,它只能产生一行的DataFrame。您需要组合d值。最简单(但不是最有效)的方法是创建一个list并像这样将每个计算出的dappend(d)相加

d_list = []
for some_data in some_data_source:
    d = get_d(some_data)
    d_list.append(d)

df = pd.DataFrame(d_list)

词典列表将根据需要生成DataFrame。

P.S。而且还不清楚,为什么您会在这样的字典中包含一个价值

'MAPE' : [ '%.2f' % mean_absolute_percentage_error(y_mat_val, y_pred)]

这将使以后难以操作。最好按原样存储

'MAPE' : '%.2f' % mean_absolute_percentage_error(y_mat_val, y_pred)

如果要在DataFrame中进行一些计算,最好不要将值转换为字符串,而要存储值。您可以稍后再转换为字符串

'MAPE' : mean_absolute_percentage_error(y_mat_val, y_pred)