例如,假设我只想
fill_null(strategy="zero")
DataFrame 的数字列。我当前的策略是这样做:
final_df = df.select(cs.exclude(cs.numeric()))
final_df.with_columns(df.select(cs.numeric()).fill_null(strategy="zero"))
是否有替代的、更惯用或更有效的方法来实现我想做的事情?
当然,可以使用以下方法之一更有效地使用 Polars 在 Polars DataFrame 中填充某些列中的空值:
1. 使用
when().then().otherwise()
此方法提供了一种基于每列类型应用不同填充策略的简洁方法:
import polars as pl
# 示例 DataFrame
df = pl.DataFrame({
"A": [1, 2, None, 4],
"B": [None, "b", "c", "d"],
"C": [5.0, 6.0, None, 8.0],
})
# 使用 `when().then().otherwise()` 进行有条件的 fill_null
final_df = df.with_columns(
pl.when(pl.col("*").is_numeric())
.then(pl.col("*").fill_null(0))
.otherwise(pl.col("*"))
)
print(final_df)
此代码执行以下操作:
-
pl.col("*").is_numeric()
: 检查 DataFrame 中的每一列是否为数字类型。 -
.then(pl.col("*").fill_null(0))
:如果该列为数字类型,则用 0 填充空值。 -
.otherwise(pl.col("*"))
:如果该列不是数字类型,则保持其原始值。
2. 使用列表推导式
对于更短的代码,可以使用列表推导式为特定列应用
fill_null
:
import polars as pl
# 示例 DataFrame
df = pl.DataFrame({
"A": [1, 2, None, 4],
"B": [None, "b", "c", "d"],
"C": [5.0, 6.0, None, 8.0],
})
# 要填充的数字列列表
numeric_cols = ["A", "C"]
# 使用列表推导式填充数字列中的空值
final_df = df.with_columns(
[
pl.col(col).fill_null(0) if col in numeric_cols else pl.col(col)
for col in df.columns
]
)
print(final_df)
此代码执行以下操作:
-
它遍历 DataFrame 中的每一列 (
for col in df.columns
)。 -
如果该列名称在
numeric_cols
列表中,则它会用fill_null(0)
填充空值。 -
否则,它会保持该列不变 (
pl.col(col)
)。
这两种方法都比创建两个单独的 DataFrame 并将它们连接起来更有效和惯用。选择认为更易读且更适合代码库的方法。
标签:python,python-polars From: 78776268