【问题标题】:What data structure to use to store values created in a function python使用什么数据结构来存储在函数 python 中创建的值
【发布时间】:2020-01-05 23:46:24
【问题描述】:

我有一个函数,它用 2 个循环迭代数据,执行计算,并且在第一个循环的每次迭代中,我得到 3 个值,我想保留在数据结构中,最好是数据帧。所以在第一个循环结束时我有 3 个值,在第二个循环结束时,我应该得到很多行,每行有 3 个值。下面是前 3 行的示例:

   col_idx  value  score
0        0    2.4    5.5
1        0   10.1    150
2        0    1.9    8.8

最好的数据结构是什么? 我试图将这 3 个值的列表附加到一个更大的列表中(稍后将其转换为数据框),但做不到。这是我的代码示例:

def calc(self):
    values = self.get_threshold_values()

    bigger_data = []

    for col_idx in range(len(self.data_set.columns)):

        score = 0.5
        value_to_split = 0
        small_data = []
        for j in range(len(threshold_values)):
            value = threshold_values.iloc[j][col_idx]  
            below_value, above_value = self.split_data(col_idx, value)
            score_for_value = self.calc_score(below_value, above_value)
            if score_for_value < score:
                score = score_for_value
                value_to_split = value
                small_data.append([col_idx, value_to_split, score])
        bigger_data.append(small_data)

    return bigger_data

我也想过初始化numpy数组,然后把它变成数据框。

有什么快速高效的方法吗?

【问题讨论】:

  • pd.DataFrame(bigger_data) ?
  • but couldn't do it - 这不是很有帮助。附加到列表是增长结构的好方法。那么你的尝试有什么问题呢?
  • 这是我得到的错误:ValueError: columns overlap but no suffix specified: Int64Index([1], dtype='int64')。实际上,即使我尝试将 3 个值添加到小列表中,它也会给我这个错误。知道如何一次将 3 个值附加到列表中吗?
  • 你可以使用:small_data.extend([col_idx, value_to_split, score])

标签: python pandas list numpy data-structures


【解决方案1】:

这是一个例子。

import random 
import pandas as pd

res = {'col_idx': list() , 'value': list() , 'score' : list()}
for _ in range(5):
    small_data = [random.randint(1,10) for _ in range(3)]
    for i, k in enumerate(res):
        res[k].append(small_data[i])

print(pd.DataFrame(res))

输出样本

   col_idx  value  score
0        5      9      8
1        8     10      6
2        6      5      6
3        9      9      4
4        6     10      9

【讨论】:

    【解决方案2】:

    通过做

    small_data.append([col_idx, value_to_split, score])
    

    您的 small_data 变成了类似 [[data1, data2...]] 的列表列表,但您需要一个普通列表。试试:

    small_data.extend([col_idx, value_to_split, score]) 
    

    这将使:[data1,data2...]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      相关资源
      最近更新 更多