在dask数据框上的列上应用.map_partition时出错

时间:2019-10-31 11:45:10

标签: python dataframe dask

我最近决定冒险,尝试探索更多DASK数据框。我正在尝试将特定功能应用于列数据框之一,我使用的语法如下:

import pandas as pd
import dask.dataframe as dd
import dask.array as da

df_data = pd.DataFrame({'Column 1': [300,300,450,500,500,750,600,300, 150],'Column 2': [100,130,230,200,300,350,600,550,530], 'Column 3': [250, 300, 400, 500, 700,350, 750, 550, 600]})

def TestFunc(x):
    y = x*2 + abs(x/2 - x*3)
    return y

dd_data = dd.from_pandas(df_data, npartitions = 1)
data_test = dd.map_partitions(TestFunc,dd_data['Column 1'])
data_test.compute()

自然地,我只是为了说明自己的工作方式而制作的一个简单示例。这段代码运行良好,问题出在我所面临的实际情况上。现在,我有一个更复杂的数据框,我想在其中将函数应用于一列。我正在应用以下功能:

 def GetID(phase):
     nDataPoints = len(phase)
     myRanges = np.deg2rad(np.arange(0,360,6))
     phase[phase>np.deg2rad(354+3)] = 0
     ID = np.array([])
     for i in np.arange(0,nDataPoints):
         val = abs(myRanges-phase[i])
         iID = np.argmin(val)
         ID = np.append(ID, iID+1)
     return ID

我能够将函数应用于带有.map_partitions的列,问题是当我尝试在.compute()之后使用以查看数值结果时,会收到错误Key error: 0。我不明白我以前的简单示例和面临的情况不会有问题。

希望我能做到简洁明了。非常感谢您在此方面的帮助!也欢迎提出查询建议

1 个答案:

答案 0 :(得分:1)

我建议在正常的Pandas数据框上尝试您的功能,以验证其是否正常工作:

c = [0;3;4;5;6]

如果这行得通,那么我接下来将尝试使用单线程调度程序以及syntax: expected "]"模块来调查回溯

const puppeteer = require('puppeteer')

;(async () => {
    const browser = await puppeteer.launch({
        headless:false,
        defaultViewport:null,
        devtools: true,
        args: ['--window-size=1920,1170','--window-position=0,0']
    })

    const page = (await browser.pages())[0]

    const open = await page.goto ( 'https://www.google.com' )

    const submit = await page.$$('input[type="submit"]')

    const length = submit.length

    let num = 0

    const shot = submit.forEach( async elemHandle => {
        num++
        await elemHandle.screenshot({
            path : `${Date.now()}_${num}.png`
        })
    })

})()

如果您使用GetID(df.compute()) 魔法在IPython中,这很容易做到。