Polars - 计算错误:从 Numpy 数组转换后无法转换“对象”类型

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

更新:

pl.from_numpy
现在可以正确推断类型。给定的示例按预期工作,不需要
.cast()


我有一个极坐标数据帧,我使用 np.array_split 将其分成多个帧。分割并转换回极坐标数据帧后,所有列的数据类型均为“对象”。当我想使用cast()更改数据类型时,出现以下错误:

ComputeError:无法转换“对象”类型

我做错了什么?/如何解决此问题?我需要将列设为不同的数据类型以进行进一步处理。

df = pl.DataFrame({
    'column1': ['2021-01-01', '2021-02-02', '2021-03-03'],
    'column2': ['value1', 'value2', 'value3']
})

df = pl.from_numpy(np.array_split(df, 2)[0], schema=df.columns, orient='row')
df = df.with_columns(pl.col('column1').cast(pl.String))
python python-polars
1个回答
2
投票

Pandas 似乎做了一些事情,最终从

np.array_split()

返回了一个 Dataframe
>>> np.array_split(df.to_pandas(), 2)[0]
      column1 column2
0  2021-01-01  value1
1  2021-02-02  value2
2  2021-03-03  value3

Polars 不会这样做:

>>> np.array_split(df, 2)[0]
array([['2021-01-01', 'value1'],
       ['2021-02-02', 'value2'],
       ['2021-03-03', 'value3']], dtype=object)

您可以使用行数和模 (

np.array_split
) 来创建组,而不是
%

df = pl.DataFrame({
    'column1': ['2021-01-01', '2021-02-02', '2021-03-03', '2021-04-04', '2021-05-05'],
    'column2': ['value1', 'value2', 'value3', 'value4', 'value5']
})

(df.with_row_count(offset=1)
   .with_columns(group = (pl.col('row_nr') % 2 != 0).cumsum())
)
shape: (5, 4)
┌────────┬────────────┬─────────┬───────┐
│ row_nr ┆ column1    ┆ column2 ┆ group │
│ ---    ┆ ---        ┆ ---     ┆ ---   │
│ u32    ┆ str        ┆ str     ┆ u32   │
╞════════╪════════════╪═════════╪═══════╡
│ 1      ┆ 2021-01-01 ┆ value1  ┆ 1     │
│ 2      ┆ 2021-02-02 ┆ value2  ┆ 1     │
│ 3      ┆ 2021-03-03 ┆ value3  ┆ 2     │
│ 4      ┆ 2021-04-04 ┆ value4  ┆ 2     │
│ 5      ┆ 2021-05-05 ┆ value5  ┆ 3     │
└────────┴────────────┴─────────┴───────┘

根据目标,您可以使用

.groupby()
.partition_by()
来拆分数据框。

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