【发布时间】:2022-07-02 07:59:57
【问题描述】:
我有一个像这样的 Cudf 数据框
列 POSITION_ANTENNA1 和 POSITION_ANTENNA2 的 dtype 是列表,我想构造一个列 = POSITION_ANTENNA1 - POSITION_ANTENNA2强>。但是,它给了我一个错误
Lists concatenation for this operation is not yetsupported
但是,如果我将数据框转换为 Pandas,它工作正常。有没有办法在不将其转换为 pandas 的情况下进行简单的列表操作。
编辑:
这是我正在尝试做的操作
df_merged['BASELINE'] = df_merged.POSITION_ANTENNA1-df_merged.POSITION_ANTENNA2
但是,如果我执行以下操作,则可以正常工作
df_merged['BASELINE'] = df_merged.POSITION_ANTENNA1.to_pandas()-df_merged.POSITION_ANTENNA2.to_pandas()
【问题讨论】:
-
“如果我将数据帧转换为 Pandas,它工作正常” - 请显示在 pandas 中工作的代码、预期输出以及您如何尝试使用 dask 调用它。
-
如果您想执行这样的算术运算,您应该在数据框中将标量作为值。数据框的目的不是为了高效或方便地将序列作为值。
-
对我来说,这在熊猫中不起作用。
df = pd.DataFrame({'pt1': [[35.2, -110.0], [47.3, -68.2]], 'pt2': [[34.8, -109.8], [46.8, -70.1]]}); df.pt2 - df.pt1引发了类似的错误。我强烈建议您遵循 Paul H 的建议——pandas 和 dask 旨在使用与 numpy 兼容的统一数据类型的列,如 float、int、string,而不是列表等对象类型。虽然您可以在数据框中保存对象,但像这样的数学运算不会按预期工作(请注意,+不会出错,但它只是连接列表)。如果这在 pandas 中对你有用,你能告诉我们minimal reproducible example吗? -
哦 - 刚刚看到您的评论,单元格是 ndarrays。我的意思是你可以按照 SultanOrazbayev 下面的建议去做。但是,如果您更改格式以使数据框性能更好并且更易于使用,这对您的同事来说将是一个好处。否则,您将始终不得不为每个操作拼凑出这样的变通方法。
-
我希望我可以更改数据框,但这不取决于我。它是来自望远镜的标准数据帧,整个社区都遵循这种格式。
标签: python pandas dataframe dask rapids