如何仅使用Polars将列表元素追加至DataFrame中?
如何仅用Polars实现向DataFrame追加行数据?
需求说明
需要通过for循环将列表中的元组元素作为行,追加到Polars DataFrame中,实现与示例中Pandas代码相同的效果。
初始代码
import numpy as np import pandas as pd import polars as pl add_list = [(10, 100, 'd'), (20, 20, 'D')] df = pl.DataFrame({"a": [1, 2, 3], "b": [6, 7, 8], "c": ["a", "b", "c"]})
Pandas实现参考
df_pd = df.to_pandas() for d in add_list: ser_pd = pd.Series(data=d, index=df_pd.columns) df_pd = pd.concat([df_pd, ser_pd.to_frame().T], ignore_index=True) print(pl.from_pandas(df_pd))
执行结果
shape: (5, 3) ┌─────┬─────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═════╡ │ 1 ┆ 6 ┆ a │ │ 2 ┆ 7 ┆ b │ │ 3 ┆ 8 ┆ c │ │ 10 ┆ 100 ┆ d │ │ 20 ┆ 20 ┆ D │ └─────┴─────┴─────┘
基于Numpy的Polars实现(已有方案)
df2 = df for d in add_list: arr = np.asarray(d).reshape(-1, len(d)) df2 = pl.concat([df2, pl.DataFrame(arr, schema=df2.schema, orient="row")])
纯Polars实现方案
循环追加方式
无需依赖Numpy,直接构造单行DataFrame进行追加:
df3 = df for d in add_list: # 将元组包装为列表,直接生成单行DataFrame,指定schema匹配原表 new_row = pl.DataFrame([d], schema=df3.schema) df3 = pl.concat([df3, new_row]) print(df3)
批量高效处理方式
如果不需要严格使用for循环,推荐批量转换后一次性拼接,性能更优(避免多次concat的对象创建开销):
# 将待追加的所有元组直接转为DataFrame,再与原表拼接 new_rows_df = pl.DataFrame(add_list, schema=df.schema) df4 = pl.concat([df, new_rows_df]) print(df4)
内容的提问来源于stack exchange,提问作者beta green
相关产品推荐
相关产品推荐

