我有一个函数,它在循环中运行,对数组列表执行计算.

在函数第一次迭代期间的某个时刻,初始化Polars Lazyframe.

在接下来的迭代中,使用相同的模式指定一个新的收件箱,并使用pi.vstack将两个收件箱逐行连接,然后再次指定为lazyframe.


import numpy as np
import polars as pl



def my_func():

  array_list = [np.zeros((1,19))]*2 #this is just for example and not representative of shape of real array.


  for i, _ in enumerate(array_list):

      #calculations are done here


      result = np.zeros((1,19)) #result of calculations (correct shape of real result)

      if i < 1:
          result_df = pl.DataFrame(data = result,
                       schema = {
                              'MDL',
                              'MVL',
                              'MWVL',
                              'RR',
                              'DET',
                              'ADL',
                              'LDL',
                              'DIV',
                              'EDL',
                              'LAM',
                              'TT',
                              'LVL',
                              'EVL',
                              'AWVL',
                              'LWVL',
                              'LWVLI',
                              'EWVL',
                              'Ratio_DRR',
                              'Ratio_LD'},
                        orient='row').lazy()

       else:

          new_df = pl.DataFrame(data=data,
                              schema = {
                                  'MDL',
                                  'MVL',
                                  'MWVL',
                                  'RR',
                                  'DET',
                                  'ADL',
                                  'LDL',
                                  'DIV',
                                  'EDL',
                                  'LAM',
                                  'TT',
                                  'LVL',
                                  'EVL',
                                  'AWVL',
                                  'LWVL',
                                  'LWVLI',
                                  'EWVL',
                                  'Ratio_DRR',
                                  'Ratio_LD'
                                  },
                                  orient='row')

          #append new dataframe to results
          result_df = result_df.collect().vstack(new_df, in_place=True).lazy()


return result_df
                

当在函数外部返回收件箱时,列名不再按顺序排列,但数据按顺序排列.

例如

result.schema

OrderedDict([('LAM', Float64),
             ('LDL', Float64),
             ('ADL', Float64),
             ('DIV', Float64),
             ('MDL', Float64),
             ('MWVL', Float64),
             ('LWVL', Float64),
             ('MVL', Float64),
             ('TT', Float64),
             ('DET', Float64),
             ('RR', Float64),
             ('EDL', Float64),
             ('Ratio_LD', Float64),
             ('Ratio_DRR', Float64),
             ('LVL', Float64),
             ('LWVLI', Float64),
             ('EWVL', Float64),
             ('EVL', Float64),
             ('AWVL', Float64)])

我想这是由于我对Lazyframes如何工作的天真,但是有没有一种方法可以在不重命名列的情况下强制执行顺序呢?

谢谢.

推荐答案

问题是您使用的set是Python中的unordered集合.

>>> schema = {'MDL', 'MVL', 'MWVL', 'RR', 'DET'}
>>> type(schema)
set
>>> schema
{'DET', 'MDL', 'MVL', 'MWVL', 'RR'} # "random" order

您想要使用列表/tuple来代替.

有一个LazyFrame构造函数,您可以使用concat来组合帧(渴望或懒惰).

frames = []

for ...:
    df = pl.LazyFrame(...)
    frames.append(df)

return pl.concat(frames)

通常不建议在Polars中使用.vstack()和任何in_place种方法/参数.

Python相关问答推荐

使用scipy. optimate.least_squares()用可变数量的参数匹配两条曲线

Pandas 第二小值有条件

TARete错误:类型对象任务没有属性模型'

Pandas 在最近的日期合并,考虑到破产

根据不同列的值在收件箱中移动数据

如何在箱形图中添加绘制线的传奇?

scikit-learn导入无法导入名称METRIC_MAPPING64'

Mistral模型为不同的输入文本生成相同的嵌入

递归访问嵌套字典中的元素值

无法在Docker内部运行Python的Matlab SDK模块,但本地没有问题

joblib:无法从父目录的另一个子文件夹加载转储模型

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

dask无groupby(ddf. agg([min,max])?''''

如果有2个或3个,则从pandas列中删除空格

如何求相邻对序列中元素 Select 的最小代价

如何在Gekko中处理跨矢量优化

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

为什么dict. items()可以快速查找?

在round函数中使用列值

上传文件并使用Panda打开时的Flask 问题