使用 .loc 从 Dask 访问值

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

对于我的一生,我无法弄清楚如何组合这两个数据框。我正在使用所有软件的最新版本,包括 Python、Pandas 和 Dask。

#pandasframe has 10k rows and 3 columns - 
['monkey','banana','furry']

#daskframe has 1.5m rows, 1column, 135 partitions - 
row.index: 'monkey_banana_furry'
row.mycolumn = 'happy flappy tuna' 

我的 dask 数据框有一个字符串作为其访问索引, 但是当我这样做时

daskframe.loc[index_str]
它返回一个 dask 数据帧,但我认为它应该返回一个特定行。我不知道如何从该数据帧访问我需要的行/值。我想要的是输入索引,并输出一个特定值。

我做错了什么?

python pandas dataframe indexing dask
2个回答
2
投票

如果您没有为列指定标签,即使

pandas.DataFrame.loc
也不会返回标量。

无论如何,要在您的情况下获得标量,首先,您需要添加

dask.dataframe.DataFrame.compute
这样您就可以获得 pandas 数据帧(因为
dask.dataframe.DataFrame.loc
返回 dask 数据帧)。只有这样,你才能使用 pandas
.loc

假设 (

dfd
) 是您的 dask 数据框,请尝试以下操作:

dfd.loc[index_str].compute().loc[index_str, "happy flappy tuna"]

或者这个:

dfd.loc[index_str, "happy flappy tuna"].compute().iloc[0]

0
投票

技巧是使用 .compute() 因为它......

将 Dask 数据帧转换为 Pandas 数据帧。

根据文档

因此,如果您想按特定名称过滤数据框,您可以这样做:

df[df['Names'] == 'MyName'].compute()

此外,如果你这样做

type(df)
,你会得到
dask.dataframe.core.DataFrame
,但是
type(df.compute())
会给你
pandas.core.frame.DataFrame
,所以你可以将结果视为任何 pandas 数据框。

只要考虑一下,通过这样做,您将像传统的 pandas 方式一样将数据存储在 RAM 中。

© www.soinside.com 2019 - 2024. All rights reserved.