繁体   English   中英

字典到数组的转换,其中 dataframe 不产生正确的行 output

[英]Dictionary to array conversion where dataframe does not produce correct row output

以下数据代表 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

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

我的方法

  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 创建一个 dataframe 并将 keys_list 和 val_list 保存为字典,以便我可以计算相对频率,然后计算相对累积频率。 然后我将 plot 那些数据。

Dataframe

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

我得到了这个 output

                                      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

我如何修改我的代码以获得 output 的愿望?

改变这个

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

对此

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

您的问题是通过执行[keys_list]您实际上在列表(列表)中有一个元素,而您只得到一行。

更好的是,您可以直接从您的频率指令中设置您的 dataframe。

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

对于 go 甚至更好,使用 Python 提供的 function 来计算可迭代的频率。

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

我认为您可以直接使用数据框,然后获取每个值的频率。

要将您的列表转换为 dataframe 使用以下代码:

df = pd.DataFrame(your_list,columns=['Column_Name'])

然后得到频率:

df["column_name"].value_counts()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM