nodejs 极坐标 .eq( <num> ) 与 .eq( <str> )

问题描述 投票:0回答:1

我正在使用 Polars 0.11.0(nodejs 环境),但我不完全理解这种行为:

let df2 : pl.DataFrame = pl.DataFrame({
  a: [1,9,3,9],
  b: ["one","one","three","four"],
  c: [1111,2222,3333,4444]
})

df2 = df2.filter( pl.col("a").eq( 9 ) )
logger.info("df2:", df2)

输出:

┌─────┬──────┬────────┐
│ a   ┆ b    ┆ c      │
│ --- ┆ ---  ┆ ---    │
│ f64 ┆ str  ┆ f64    │
╞═════╪══════╪════════╡
│ 9.0 ┆ one  ┆ 2222.0 │
│ 9.0 ┆ four ┆ 4444.0 │
└─────┴──────┴────────┘

--- 但是---

如果我想使用 str 类型列 (b):

df2 = df2.filter( pl.col("b").eq( "one" ) )

输出: 错误:未找到:无法找到列“一”;有效列:[“a”,“b”,“c”]

并且必须使用 pd.lit():

df2 = df2.filter( pl.col("b").eq( pl.lit("one") ) )
┌─────┬─────┬────────┐
│ a   ┆ b   ┆ c      │
│ --- ┆ --- ┆ ---    │
│ f64 ┆ str ┆ f64    │
╞═════╪═════╪════════╡
│ 1.0 ┆ one ┆ 1111.0 │
│ 9.0 ┆ one ┆ 2222.0 │
└─────┴─────┴────────┘

为什么当我用 str 过滤时需要 pd.lit() ,为什么当我用 number 过滤时不需要?

请向我解释一下这种行为。谢谢!

如果

df2 = df2.filter( pl.col("a").eq( 9 ) )

有效

df2 = df2.filter( pl.col("b").eq( "one" ) )

为什么不呢?

javascript string filter lit nodejs-polars
1个回答
0
投票

当您将

.eq(9)
Polars
一起使用时,它会理解
9
是数字文字。它直接使用此值与列
a
中的值进行比较,但使用
string
默认情况下它需要列名称或表达式,使用
pl.lit()
您可以更正
Polars
默认行为并使其处理“一” " 作为文字字符串值,而不是列名。

简单来说,如果您需要使用

string
进行过滤,您需要像
pl.lit
一样
.eq( pl.lit("one"))
,如果您需要使用
number
进行过滤,只需传递数字,例如
.eq( "one" ))

© www.soinside.com 2019 - 2024. All rights reserved.