polars坑点记录
增加删除单元格数据
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)
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
soap的会员制餐厅!
喜欢就支持一下吧