增加删除单元格数据

polars由于它的“不可变”的设计理念,导致修改dataframe单元格要通过with_columns并配合表达式when -> then -> otherwise -> alias去修改单元格,而with_columns是返回一个新的dataframe,所以只能覆盖旧的dataframe或者用新的dataframe去做操作:

import polars as pl

df = pl.DataFrame({
    "A": [1, 2, 3, 4],
    "B": ["x", "y", "z", "w"],
    "C": [10, 20, 30, 40]
})

df_modified = (
    df.with_row_index("row_idx")
    .with_columns(
        pl.when(pl.col("row_idx") == 1)
        .then(99)
        .otherwise(pl.col("A"))
        .alias("A")
    )
    .drop("row_idx")
)
print("原始数据:")
print(df)
print("\n修改后:")
print(df_modified)

如果想通过多个表达式修改不同的数据,有个比较粗暴的方式就是使用多个when -> then -> otherwise -> alias 表达式和列表去修改:

import polars as pl

df = pl.DataFrame({
    "A": [1, 2, 3, 4, 5],
    "B": ["x", "y", "z", "w", "v"],
    "C": [10, 20, 30, 40, 50]
})

# 批量修改多个单元格
df_modified = (
    df.with_row_index("row_idx")
    .with_columns([
        # 修改第1行A列为99
        pl.when(pl.col("row_idx") == 1)
        .then(99)
        .otherwise(pl.col("A"))
        .alias("A"),
        
        # 修改第2行B列为"new_value"
        pl.when(pl.col("row_idx") == 2)
        .then("new_value")
        .otherwise(pl.col("B"))
        .alias("B"),
        
        # 修改第0行和第3行的C列
        pl.when(pl.col("row_idx").is_in([0, 3]))
        .then(pl.col("C") * 2)
        .otherwise(pl.col("C"))
        .alias("C")
    ])
    .drop("row_idx")
)

print(df_modified)

文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
坑点记录 坑点记录
喜欢就支持一下吧