我创建了一个具有集合模式的空数据框架。模式设置列的数据类型。我想在空数据框中添加一个名称匹配列(系列)。但它似乎不喜欢它。
# Empty dataframe with a given schema
df = pl.DataFrame(schema={"my_string_col":str, "my_int_col": int, "my_bool_col": bool})
# Now I try to add a series to it
df = df.with_columns(pl.Series(name="my_int_col", values=[1, 2, 3, 4, 5]))
但是我得到以下错误:
exceptions.ShapeError: unable to add a column of length 5 to a dataframe of height 0
看起来好像polar无法填充其余的列(即my_string_col &My_bool_col)和空值。在Pandas中,你可以通过多种方式做到这一点,我想知道我是否错过了什么,或者还没有实现?
这实际上是一个.join
操作
col = pl.Series(name="my_int_col", values=[1, 2, 3, 4, 5])
df.join(col.to_frame(), on=col.name, how="outer")
shape: (5, 3)
┌───────────────┬────────────┬─────────────┐
│ my_string_col ┆ my_int_col ┆ my_bool_col │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ bool │
╞═══════════════╪════════════╪═════════════╡
│ null ┆ 1 ┆ null │
│ null ┆ 2 ┆ null │
│ null ┆ 3 ┆ null │
│ null ┆ 4 ┆ null │
│ null ┆ 5 ┆ null │
└───────────────┴────────────┴─────────────┘
您正在尝试将具有5个元素的系列添加到具有0行的空DataFrame。
import polars as pl
df_new = pl.DataFrame({
"my_string_col": [None],
"my_int_col": [1],
"my_bool_col": [None]
})
dfs = [df_new] * 5
df = pl.concat(dfs)
print(df)
输出:
shape: (5, 3)
┌───────────────┬────────────┬─────────────┐
│ my_string_col ┆ my_int_col ┆ my_bool_col │
│ --- ┆ --- ┆ --- │
│ f64 ┆ i64 ┆ f64 │
╞═══════════════╪════════════╪═════════════╡
│ null ┆ 1 ┆ null │
│ null ┆ 1 ┆ null │
│ null ┆ 1 ┆ null │
│ null ┆ 1 ┆ null │
│ null ┆ 1 ┆ null │
└───────────────┴────────────┴─────────────┘