如何高效地向Polars DataFrame中批量追加多行?
在Polars中高效追加多行数据到DataFrame
Polars 是面向列的数据分析库,批量操作比单行操作高效得多。下面是几种实用的多行追加方法:
方法1:构造多行DataFrame后使用extend
直接创建包含所有待追加行的DataFrame,通过extend方法一次性合并,这是Polars中最推荐的批量追加方式:
import polars as pl # 初始化空DataFrame df_polars = pl.DataFrame({ 'abc': [], 'def': [], 'ghi': [] }) # 构造包含多行数据的新DataFrame new_rows = pl.DataFrame({ 'abc': [None, 5, None], 'def': [10.0, 20.0, 30.0], 'ghi': [None, None, 15] }) # 批量追加 df_polars = df_polars.extend(new_rows) print(df_polars)
方法2:通过rows参数批量追加行
如果你的数据是以行的形式存储(比如列表的列表),可以直接通过extend的rows参数传入,Polars会自动匹配列名:
import polars as pl df_polars = pl.DataFrame({ 'abc': [], 'def': [], 'ghi': [] }) # 多行数据:每个子列表代表一行 multi_rows = [ [None, 10.0, None], [3, 20.0, None], [None, 30.0, 7] ] # 批量追加 df_polars = df_polars.extend(rows=multi_rows) print(df_polars)
方法3:预收集数据后一次性生成DataFrame(适合大量数据)
如果需要追加的数据量很大,建议先把所有数据收集到字典或列表中,最后一次性转换成DataFrame再合并,避免多次调用extend带来的性能损耗:
import polars as pl # 初始化空DataFrame df_polars = pl.DataFrame({ 'abc': [], 'def': [], 'ghi': [] }) # 预收集多行数据 data = { 'abc': [None, 2, None, 8], 'def': [10.0, 20.0, 30.0, 40.0], 'ghi': [None, None, 5, 12] } # 合并到原DataFrame df_polars = df_polars.extend(pl.DataFrame(data)) print(df_polars)
注意事项
- 避免循环调用单行追加:Polars的
extend是为批量操作设计的,循环单行追加会大幅降低性能,因为每次操作都需要重新构造列数据。 - 确保追加的数据列名和原DataFrame一致:如果列名不匹配,Polars会自动补全
None或者报错(取决于配置),建议提前对齐列结构。
内容的提问来源于stack exchange,提问作者Nayem Jaman Tusher
相关产品推荐
相关产品推荐

