compute() 命令不适用于 python 中的 dask 系列

问题描述 投票:0回答:1

我正在尝试计算大规模数据上的成对比例,其中每一列都是像这样的单独样本(这是一个小例子):

           0         1         2
0      34.04     56.55     49.65
1      35.86     49.28     42.36
2      11.21     33.96     18.11
3      12.40     23.17     16.28
4    1087.51     93.37    166.75
5     494.39    182.15    893.23
6   11018.44   6044.63  17347.33
7      20.48     38.01     92.82
8   14866.34   9034.35  19625.89
9   21932.70  12289.75  43752.48
10   8561.40   3279.36   8717.61
11   1050.82   1302.27   1951.25
12    978.03    202.63    179.67
13     15.22     28.82     22.21
14     42.94     40.77     84.22
15    231.05     66.02    220.13
16     69.01     57.45     85.20
17    309.21     88.90   1394.35
18  13957.93   8632.00  35660.11

因此,对于每一列,我想分别获得一个系列,其中包含第一个值除以第二个值的结果,然后第一个值除以第三个值的结果,依此类推(仅在前几行上计算):

           0         1         2
0      0.949     1.147     1.02
1      3.03      1.665     2.74
2      2.74      2.44      3.04
3      0.031      0.6      0.29

我正在使用 dask,这就是我到目前为止所做的:

def create_dask(df):
    delayed_computations = []

    # Convert each column to a Dask Series and then create a Dask DataFrame
    for column_name in df.columns:
        dask_series = dd.from_pandas(df[column_name],
                                     npartitions=1)  #keep each column in one partition

        computation = dask_series.map_partitions(lambda df: calculate_ratios(df), 
        meta=pd.Series([], dtype='float64'))

        delayed_computations.append(computation)


    return dask_results

def calculate_ratios(data):
    # Calculate pairwise ratios for each value in the column
    file_len = 19
    ratios = []

    for i in range(file_len - 1):
        ratio_values = data.iloc[i] / data.iloc[i + 1:]
        ratios.append(ratio_values)

    return dd.concat(ratios, axis=1, ignore_index=True)
    

if __name__ == '__main__':
    df_lung = pd.read_excel(os.path.join(base_path, 'raw_data_49_lung_cluster90 - Copy.xls'))

    dask_lung = create_dask(df_lung)

我的问题是,我似乎无法计算并查看“计算”的结果或之后的任何 dask 结构,我可以计算 dask_series 并查看我的数据,但之后需要很长时间来计算()任何东西否则,我不知道我的“calculate_ratios”功能是否真的有效,为什么会发生这种情况以及如何修复它?

谢谢!

python pandas dask delay dask-delayed
1个回答
0
投票

您的

create_dask
函数不会返回任何内容,因此
dask_lung = create_dask(df_lung)
将返回
None
。在
calculate_ratios
中,您正在使用
dd.concat
,但您应该使用
pd.concat
,因为您正在
calculate_ratios
中开发 Pandas 系列。另外,您使用的
axis=1
对于系列来说是不正确的。应该是
axis=0
。 另一件事是,您要循环访问
calculate_ratios
中的数据,这对于大数据来说可能效率低下。 变量
file_len
被硬编码为19,这使得函数不太灵活。

import dask.dataframe as dd
import pandas as pd
import os

def create_dask(df):
    delayed_computations = []
    
    for column_name in df.columns:
        dask_series = dd.from_pandas(df[column_name], npartitions=1)
        
        computation = dask_series.map_partitions(lambda df: calculate_ratios(df),
                                                 meta=pd.Series([], dtype='float64'))
        delayed_computations.append(computation)
    
    return dd.concat(delayed_computations, axis=1)

def calculate_ratios(data):
    ratios = []
    file_len = len(data)
    
    for i in range(file_len - 1):
        ratio_values = data.iloc[i] / data.iloc[i + 1:]
        ratios.append(ratio_values)
    
    return pd.concat(ratios, axis=0, ignore_index=True)

if __name__ == '__main__':
    base_path = 'your_base_path_here'
    df_lung = pd.read_excel(os.path.join(base_path, 'raw_data_49_lung_cluster90 - Copy.xls'))
    
    dask_lung = create_dask(df_lung)
    computed_result = dask_lung.compute()
    print(computed_result)
© www.soinside.com 2019 - 2024. All rights reserved.