【问题标题】:Most efficient way to turn a 5D array into a Pandas dataframe将 5D 数组转换为 Pandas 数据框的最有效方法
【发布时间】:2017-02-24 16:22:45
【问题描述】:

我有一个称为预测变量的 5D 数组,其形状为 [6,288,37,90,107],其中 6 是变量的数量,
288 是这些变量的时间序列,
37 是 k位置,
90 是 j 个位置,
107 是 i 个位置。
我想要一个pandas dataframe,其中包括每个k,j,i 位置的每个变量时间序列的列,这样当然会有很多列。
然后我想以某种方式获取每列的名称。
例如第一列是var1_k_j_i = predictors[0,:,0,0,0]
除了名字我实际上想要k locationj location
i location 而不是k_j_i
由于有这么多我无法手动执行此操作,所以我希望就将其组织成 pandas 数据框并获取名称的最佳方法提出建议?可能是循环?

因此,总而言之,到此结束时,我希望我的 5D 预测变量数组变成一个大熊猫数据框,其中每一列都是位于不同 k、j、i 位置的变量,具有相应的变量名称和位置数据框的标题或第一行。

【问题讨论】:

    标签: python loops pandas dataframe


    【解决方案1】:

    听起来你需要在这里享受重塑的乐趣。

    解决位置 i,j,k 就像使用 reshape 一样简单。然后我不确定您是否可以再次重塑以获得所需的 2D 表示,所以我为您建议如下循环。

    import itertools
    import pandas as pd
    
    dfs = []
    new_matrix = matrix.reshape([6,288,37*90*107])
    for var range(6):
       iterator = itertools.product(range(37), range(90), range(107))
       columns = ['var%i_' % var + '_'.join(map(str, x)) for x in iterator]
       dfs.append(pd.DataFrame(new_matrix[var]))
    
    result = pd.concat(dfs)
    

    【讨论】:

    • 嘿,我猜你想通了。我将所有 'feature' 变量重命名为 'var' 但有一个漏掉了!我刚刚修改了它。
    猜你喜欢
    • 2020-07-27
    • 2010-09-18
    • 2022-12-07
    • 2023-04-05
    • 2011-05-29
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多