如何为Polars DataFrame添加新列?将值列表转为字符串列
在Polars中添加对应行的字符串列的正确方法
你当前的问题是pl.lit(english_titles)会把整个列表作为单一值传入,导致每行都重复这个列表。要让列表的每个元素对应DataFrame的每行,有以下几种简洁的实现方式:
方法1:使用pl.Series直接构造列
这是最直接的方式,将列表转换为Polars Series后添加到DataFrame中:
import polars as pl df = pl.DataFrame({"a": [1, 2], "b": [4, 5]}) english_titles = ["ok", "meh"] # 直接用Series创建新列 df = df.with_columns(pl.Series(name="english_title", values=english_titles))
执行后得到的结果符合预期:
┌─────┬─────┬───────────────┐ │ a ┆ b ┆ english_title │ │ --- ┆ --- ┆ --- │ │ i64 ┆ i64 ┆ str │ ╞═════╪═════╪═══════════════╡ │ 1 ┆ 4 ┆ ok │ │ 2 ┆ 5 ┆ meh │ └─────┴─────┴───────────────┘
方法2:利用list.get配合行索引
如果需要基于现有列表动态提取对应行的值,可以结合pl.int_range生成行索引,再用list.get获取对应元素:
df = df.with_columns( pl.lit(english_titles).list.get(pl.int_range(0, len(df))).alias("english_title") )
这种方法适合需要对列表做额外处理的场景,但方法1在仅需直接映射时更高效简洁。
内容的提问来源于stack exchange,提问作者xiaodai
相关产品推荐
相关产品推荐

