-2

我正在将一些熊猫系列和熊猫数据框转换为考拉以实现可扩展性。但是在我使用的地方,np.where()我试图传递考拉数据帧,就像之前传递熊猫数据帧一样。但是我收到了一个错误 PandasNotImplementedError。

我该如何克服这个错误?我试过ks.where()了,但没有用。

这是我正在使用 Pandas 编写的代码模型。

import pandas as pd
import numpy as np
pdf = np.where(condition, action1, action2)

toPandas()如果我使用or将考拉转换回熊猫,代码就可以工作from_pandas(),但由于性能和可扩展性的原因,我不能使用熊猫。如果可能的话,请建议我在 Koalas 中使用一种替代方法,或者为 numpy 提供一种替代库,它可以很好地与 koalas 配合使用。

4

2 回答 2

0

根据Koalas (1.8.2) 上的文档databricks.koalas.DataFrame, where 函数在条件为时databricks.koalas.Series仅接受两个参数,即条件和值False。无论条件是True,值都不会改变。它的行为类似于它在 Pandas 中的行为。

因此,可以像这样使用 where 语句的链接:

kdf.where(condition, action2).where(~condition, action1)
# action1 --> Action when condition is True.
# action2 --> Action when condition is False.

# The output of this cannot be assigned back to a column though. To assign the output to some column, the where has to be applied on a Series.
kdf['some_column'].where(condition, action2).where(~condition, action1)

另外,请注意,在 Koalas 上,databricks.koalas.Series可以将 where 条件分配回列,但不能将 where 条件应用于 a 时的输出databricks.koalas.DataFrame,就像在您的情况下可以在 Pandas 中完成一样。

于 2022-02-23T15:10:30.403 回答
0

我对考拉不太熟悉,但我认为使用DataFrame.where()的东西会起作用。

例如

from databricks.koalas.config import set_option, reset_option
set_option("compute.ops_on_diff_frames", True)
df1 = ks.DataFrame({'A': [0, 1, 2, 3, 4], 'B':[100, 200, 300, 400, 500]})
df2 = ks.DataFrame({'A': [0, -1, -2, -3, -4], 'B':[-100, -200, -300, -400, -500]})
df1.where(df1 > 1, df2)

如果你需要的话,还有一个相应的 koalas Series.where()。

于 2021-12-28T17:48:29.123 回答