首页 > 解决方案 > 字典到数组的转换,其中数据帧不产生正确的行输出

问题描述

以下数据代表 40 个晶体管样本的寿命(以小时为单位):

112, 121, 126, 108, 141, 104, 136, 134
121, 118, 143, 116, 108, 122, 127, 140
113, 117, 126, 130, 134, 120, 131, 133
118, 125, 151, 147, 137, 140, 132, 119
110, 124, 132, 152, 135, 130, 136, 128

给出这些数据的累积相对频率图

我的方法

  1. 首先,我创建一个数据集数组

  2. 然后我找出数组中每个数字的频率

  3. 然后我创建两个列表来保存数据的值及其频率

我的代码:

LifeTime = [112, 121, 126, 108, 141, 104, 136, 134,
        121, 118, 143, 116, 108, 122, 127, 140,
        113, 117, 126, 130, 134, 120, 131, 133,
        118, 125, 151, 147, 137, 140, 132, 119,
        110, 124, 132, 152, 135, 130, 136, 128]
# initializing dict to store frequency of each element
dict_fre = {}
# iterating over the elements for frequency
for element in LifeTime:
  if element in dict_fre:
    dict_fre[element] += 1
  else:
    dict_fre[element] = 1
#code to store the keys and their corresponding values to the list
keys_list=[]
val_list=[]
for i,j in dict_fre.items():
keys_list.append(i)
val_list.append(j)

接下来,我使用 Pandas 创建一个数据框并将 keys_list 和 val_list 保存为字典,以便我可以计算相对频率,然后计算相对累积频率。然后我将绘制这些数据。

数据框

import pandas as pd
d = {'life':[keys_list],'frequency':[val_list]}
df = pd.DataFrame(d)

我得到了这个输出

                                      life                                     frequency
0   [112, 121, 126, 108, 141, 104, 136, 134, 118, ...   [1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, ...

但我想得到这样的东西

life                                      frequency
112                                       1
121                                       2
126                                       2
108                                       2

我怎样才能修改我的代码以获得期望的输出?

标签: pythonpandasdataframe

解决方案


改变这个

d = {'life':[keys_list],'frequency':[val_list]}

对此

d = {'life':keys_list,'frequency':val_list}

您的问题是通过[keys_list]在列表中有效地拥有一个元素(列表)并且您只得到一行。

更好的是,您可以直接从频率字典中设置数据框。

df = pd.DataFrame(dict_fre.items(), columns=['life', 'frequency'])

为了做得更好,请使用 Python 提供的函数来计算可迭代的频率。

from collections import Counter
df = pd.DataFrame(Counter(LifeTime).items(), columns=['life', 'frequency'])

推荐阅读