这是我第一次使用Polar数据框.我正在try 将输入值与Postgres表中的数据进行匹配. 分享一些示例代码,这是实际代码的一部分. 我有一个名为"Score"的列,类型为list[i32].作为下一步,我试图找到该列表中的最大值.我得到错误.

import polars as pl
import jaro


def test_polars():
    fname='sarah'
    lname = 'vatssss'
    data = {"first_name": ['sarah', 'purnima'], "last_name": ['vats', 'malik']}
    df = pl.DataFrame(data)
    print(df)
    df = (df.with_columns(
        [
            (pl.when(pl.col("first_name") == fname).then(1).otherwise(0)).alias("E_FN"),
            (pl.when(pl.col("last_name") == lname).then(1).otherwise(0)).alias("E_LN"),
            (pl.when(pl.col("first_name").str.slice(0, 3) == fname[0:3]).then(1).otherwise(0)).alias("F3_FN"),
            (pl.when(pl.col("first_name").map_elements(
                lambda first_name: jaro.jaro_winkler_metric(first_name, fname)) >= 0.8).then(1).otherwise(0)).alias(
                "CMP80_FN"),
            (pl.when(pl.col("last_name").map_elements(
                lambda first_name: jaro.jaro_winkler_metric(first_name, lname)) >= 0.9).then(1).otherwise(0)).alias(
                "CMP90_LN"),

        ]
    )
    .with_columns(
        [ pl.concat_list(980 * pl.col("E_FN")  ,
                         970 * pl.col("E_LN") ).alias("score")



        ]
    )
    .with_columns(
        [pl.max(pl.col("score")).alias("max_score")

         ]
    )

    )

    print(df)


if __name__ == '__main__':
    test_polars()

C:\PythonProject\pythonProject\venv\Graph_POC\Scripts\python.exe "C:\PythonProject\pythonProject\polars data.py" 
shape: (2, 2)
┌────────────┬───────────┐
│ first_name ┆ last_name │
│ ---        ┆ ---       │
│ str        ┆ str       │
╞════════════╪═══════════╡
│ sarah      ┆ vats      │
│ purnima    ┆ malik     │
└────────────┴───────────┘
Traceback (most recent call last):
  File "C:\PythonProject\pythonProject\polars data.py", line 45, in <module>
    test_polars()
  File "C:\PythonProject\pythonProject\polars data.py", line 34, in test_polars
    [pl.max(pl.col("score")).alias("max_score")
     ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\PythonProject\pythonProject\venv\Graph_POC\Lib\site-packages\polars\functions\aggregation\vertical.py", line 175, in max
    return F.col(*names).max()
           ^^^^^^^^^^^^^
  File "C:\PythonProject\pythonProject\venv\Graph_POC\Lib\site-packages\polars\functions\col.py", line 288, in __new__
    return _create_col(name, *more_names)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\PythonProject\pythonProject\venv\Graph_POC\Lib\site-packages\polars\functions\col.py", line 67, in _create_col
    raise TypeError(msg)
TypeError: invalid input for `col`

Expected `str` or `DataType`, got 'Expr'.

Process finished with exit code 1

推荐答案

您可以使用list.max()函数.简单的例子:

df = pl.DataFrame(
    {
        "a": [[1, 8, 3],[6,2,7],[8,10,11]],
        "b": [4, 5, None],
    }
)

┌─────────────┬──────┐
│ a           ┆ b    │
│ ---         ┆ ---  │
│ list[i64]   ┆ i64  │
╞═════════════╪══════╡
│ [1, 8, 3]   ┆ 4    │
│ [6, 2, 7]   ┆ 5    │
│ [8, 10, 11] ┆ null │
└─────────────┴──────┘

df.with_columns(
    pl.col('a').list.max().alias('max_a')
)

┌─────────────┬──────┬───────┐
│ a           ┆ b    ┆ max_a │
│ ---         ┆ ---  ┆ ---   │
│ list[i64]   ┆ i64  ┆ i64   │
╞═════════════╪══════╪═══════╡
│ [1, 8, 3]   ┆ 4    ┆ 8     │
│ [6, 2, 7]   ┆ 5    ┆ 7     │
│ [8, 10, 11] ┆ null ┆ 11    │
└─────────────┴──────┴───────┘

所以在你的情况下,只使用pl.col("score").list.max而不是pl.max(pl.col("score")).max()只是col(names).max()的语法糖,应该返回列的最大值,而不是列的列表类型单元格的最大值.

Python相关问答推荐

Matlab中是否有Python的f-字符串等效物

带条件计算最小值

在Pandas DataFrame操作中用链接替换'方法的更有效方法

如何在solve()之后获得症状上的等式的值

关于Python异步编程的问题和使用await/await def关键字

所有列的滚动标准差,忽略NaN

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

当我try 在django中更新模型时,模型表单数据不可见

我的字符串搜索算法的平均时间复杂度和最坏时间复杂度是多少?

为什么常规操作不以其就地对应操作为基础?

为什么'if x is None:pass'比'x is None'单独使用更快?

从旋转的DF查询非NaN值

并行编程:同步进程

jsonschema日期格式

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

分解polars DataFrame列而不重复其他列值

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError

根据边界点的属性将图划分为子图

如何从具有完整层次数据的Pandas框架生成图形?