仪表板 "Column assignment doesn't support type numpy.ndarray"
Dask "Column assignment doesn't support type numpy.ndarray"
我正在尝试使用 Dask 而不是 pandas,因为我正在分析的数据量非常大。我想根据几个条件添加一个标志列。
import dask.array as da
data['Flag'] = da.where((data['col1']>0) & (data['col2']>data['col4'] | data['col3']>data['col4']), 1, 0).compute()
但是,然后我收到以下错误消息。上面的代码在 np.where
与 pandas 数据框一起使用时完美运行,但不适用于 dask.array.where
.
如果 numpy 工作并且操作是 row-wise,那么一种解决方案是使用 .map_partitions
:
def create_flag(data):
data['Flag'] = np.where((data['col1']>0) & (data['col2']>data['col4'] | data['col3']>data['col4']), 1, 0)
return data
ddf = ddf.map_partitions(create_flag)
您可以使用dask.dataframe.Series.where
来获得相同的结果,但不需要计算。或者更好的是,您可以利用 True/False 值可以直接转换为 1/0 的事实,只需将类型提升为 int
(见下文)。
这两个选项都具有将所有操作保留为 dask.dataframe 的优势,从而使调度程序比 non-dask 使用 map_partitions 调用的操作或直接分配计算结果。
data['Flag'] = (
(data['col1']>0)
& ((data['col2']>data['col4']) | (data['col3']>data['col4']))
).astype(int)
我正在尝试使用 Dask 而不是 pandas,因为我正在分析的数据量非常大。我想根据几个条件添加一个标志列。
import dask.array as da
data['Flag'] = da.where((data['col1']>0) & (data['col2']>data['col4'] | data['col3']>data['col4']), 1, 0).compute()
但是,然后我收到以下错误消息。上面的代码在 np.where
与 pandas 数据框一起使用时完美运行,但不适用于 dask.array.where
.
如果 numpy 工作并且操作是 row-wise,那么一种解决方案是使用 .map_partitions
:
def create_flag(data):
data['Flag'] = np.where((data['col1']>0) & (data['col2']>data['col4'] | data['col3']>data['col4']), 1, 0)
return data
ddf = ddf.map_partitions(create_flag)
您可以使用dask.dataframe.Series.where
来获得相同的结果,但不需要计算。或者更好的是,您可以利用 True/False 值可以直接转换为 1/0 的事实,只需将类型提升为 int
(见下文)。
这两个选项都具有将所有操作保留为 dask.dataframe 的优势,从而使调度程序比 non-dask 使用 map_partitions 调用的操作或直接分配计算结果。
data['Flag'] = (
(data['col1']>0)
& ((data['col2']>data['col4']) | (data['col3']>data['col4']))
).astype(int)