更新:
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))
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()
来拆分数据框。