首页 > 解决方案 > PandasNotImplementedError:方法 `pd.Series.__iter__()` 未实现。如果您想将数据收集为 NumPy 数组

问题描述

我尝试在 Koalas dataframe 中创建一个新列df。数据框有 2 列:col1col2. 我需要创建一个新列newcol作为col1col2值的中位数。

import numpy as np
import databricks.koalas as ks

# df is Koalas dataframe
df = df.assign(newcol=lambda x: np.median(x.col1, x.col2).astype(float))

但我收到以下错误:

PandasNotImplementedError:该方法pd.Series.__iter__()未实现。如果要将数据收集为 NumPy 数组,请改用“to_numpy()”。

我也试过:

df.newcol = df.apply(lambda x: np.median(x.col1, x.col2), axis=1)

但它没有用。

标签: pythonpandasdataframedatabricksspark-koalas

解决方案


我有同样的问题。需要注意的是,我使用的是 pyspark.pandas 而不是考拉,但我的理解是 pyspark.pandas 来自考拉,所以我的解决方案可能仍然有帮助。我尝试用考拉测试它,但无法运行一个合理版本的集群。

import pyspark.pandas as ps

data = {"col_1": [1,2,3], "col_2": [4,5,6]}
df = ps.DataFrame(data)

median_series = df[["col_1","col_2"]].apply(lambda x: x.median(), axis=1)
median_series.name = "median"

df = ps.merge(df, median_series, left_index=True, right_index=True, how='left')

在应用时,lambda 参数 x 是每行的 pandas.Series,所以我使用了它的中值方法。令人讨厌的是,我无法分配任何工作,我发现的唯一方法就是进行这种丑陋的合并。哦,并且曾经让 df 保持相同的行数让您放心,但根据上下文,内部可能会很好


推荐阅读