快捷项目分配。无法使用loc进行项目分配

Mat*_*zar 4 python pandas dask

我有一个我无法容纳在内存中的镶木地板文件文件夹,因此我正在dask用来执行数据清理操作。我有一个要执行项目分配的功能,但似乎找不到任何在线解决方案可作为该特定功能的解决方案。以下是在熊猫中起作用的功能。如何在dask数据框中获得相同的结果?我以为延迟可能会有所帮助,但是我尝试编写的所有解决方案都没有起作用。

def item_assignment(df):

    new_col = np.bitwise_and(df['OtherCol'], 0b110)

    df['NewCol'] = 0
    df.loc[new_col == 0b010, 'NewCol'] = 1
    df.loc[new_col == 0b100, 'NewCol'] = -1 

    return df
Run Code Online (Sandbox Code Playgroud)

TypeError: '_LocIndexer' object does not support item assignment

Sve*_*ris 6

map_partitions在这种情况下,您可以使用原始 pandas 功能。IE

ddf.map_partitions(item_assignment)
Run Code Online (Sandbox Code Playgroud)

这对 dask 数据帧的各个 pandas 组成数据帧进行操作

df = pd.DataFrame({"OtherCol":[0b010, 0b110, 0b100, 0b110, 0b100, 0b010]})
ddf = dd.from_pandas(df, npartitions=2)
ddf.map_partitions(item_assignment).compute()
Run Code Online (Sandbox Code Playgroud)

我们看到了预期的结果:

   OtherCol  NewCol
0         2       1
1         6       0
2         4      -1
3         6       0
4         4      -1
5         2       1
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 6

您可以将loc作业替换为dask.dataframe.Series.mask

df['NewCol'] = 0
df['NewCol'] = df['NewCol'].mask(new_col == 0b010, 1)
df['NewCol'] = df['NewCol'].mask(new_col == 0b100, -1)
Run Code Online (Sandbox Code Playgroud)