首页 > 编程问答 >当 python 极坐标中某些列条目为空时,如何分解 List[_] 列?

当 python 极坐标中某些列条目为空时,如何分解 List[_] 列?

时间:2024-07-30 16:13:29浏览次数:17  
标签:python python-polars

给定如下所示的 Polars df,如何在两列上调用 explode() ,同时将空条目扩展到正确的长度以与其行匹配?

shape: (3, 2)
┌───────────┬─────────────────────┐
│ x         ┆ y                   │
│ ---       ┆ ---                 │
│ list[i64] ┆ list[bool]          │
╞═══════════╪═════════════════════╡
│ [1]       ┆ [true]              │
│ [1, 2]    ┆ null                │
│ [1, 2, 3] ┆ [true, false, true] │
└───────────┴─────────────────────┘

当前调用 df.explode(["x", "y" ]) 将导致此错误:

polars.exceptions.ShapeError: exploded columns must have matching element counts

我假设没有内置方式。但我找不到/想不出一种方法将该空值转换为具有正确长度的列表,以便爆炸可以工作(假设我事先不静态地知道所需的长度)。

我研究了传递列表。长度写入repeat_by(),但repeat_by()不支持null。


没有内置的方法来使用 explode 处理 Polars 中不等长的列表。但是,可以使用以下方法预处理数据帧:

import polars as pl

df = pl.DataFrame({
    "x": [[1], [1, 2], [1, 2, 3]],
    "y": [[True], None, [True, False, True]]
})

def explode_fill(df, columns):
    # Find the maximum length of lists in the specified columns
    max_len = df.select(pl.max([pl.col(c).arr.len() for c in columns])).item()

    # Fill null values and extend lists to the maximum length
    for col in columns:
        df = df.with_columns(
            pl.when(pl.col(col).is_null())
            .then(pl.lit(pl.repeat(None, max_len).alias(col)))
            .otherwise(pl.col(col))
        )

    return df.explode(columns)

df = explode_fill(df, ["x", "y"])
print(df)

此代码执行以下操作:

  1. explode_fill 函数:
  2. 接受数据帧和要展开的列列表作为输入。
  3. 计算指定列中列表的最大长度 ( max_len )。
  4. 迭代要展开的列:
    • 使用 pl.when 检查空值 ( None )。
    • 如果为 None ,则使用 pl.repeat(None, max_len) 将其替换为具有 max_len None 值的列表。
    • 否则,保持原始值。
  5. 使用 explode 展开修改后的列。

  6. 应用 explode_fill 函数:

  7. 在数据帧和列 ["x", "y"] 上调用 explode_fill 函数。

此代码有效地将空列表或 None 值替换为具有正确长度(由最长列表确定)的 None 值列表,从而允许 explode 在没有错误的情况下工作。

此解决方案避免了使用 apply map ,这在处理更大的数据集时可以提高性能。

标签:python,python-polars
From: 78810432

相关文章

  • 使用python从网站自动下载pdf时出错
    我想从一个名为epadossier.nl的网站自动批量下载pdf我用谷歌搜索了这个并找到了一段代码并修复了一个小错误。所以现在我得到了这个`importrequestsurl="https://www.epadossier.nl/adres/plaats/straat/num"response=requests.get(url)ifresponse.status_cod......
  • 避免字符串连接的嵌套循环的 Pythonic 方法
    我想找到所有5位数字的字符串,其中前三位数字在我的第一个列表中,第二个槽第四个数字在我的第二个列表中,第三到第五个数字在我的最后一个列表中:l0=["123","567","451"]l1=["234","239","881"]l2=["348","551","399"......
  • Python 环境配置(二)安装jupyter、matplotlib、numpy库
    Python环境配置(二)安装jupyter、matplotlib、numpy库一、numpypipinstallnumpy二、matplotlibpipinstallmatplotlib三、jupyter1、anaconda自带Jupyter2、pycharm插件只有Pycharm的Professional版才支持JupyterNotebook,请注意版本3、新建文件#%......
  • 如何使用 PIPE 并行运行 python 子进程?
    我正在使用inkscape将一堆SVG图像转换为PNG。单线程:importsubprocessimporttimeimportosinkscape_path=r'C:\ProgramFiles\Inkscape\bin\inkscape.com'steps=30filenames=[]processes=[]#t_start=time.process_time()t_start=time.time()f......
  • Python sqlite3 删除数据
    要从SQLite表中删除记录,你需要使用DELETEFROM语句。要删除特定的记录,你需要同时使用WHERE子句。要更新特定的记录,你需要同时使用WHERE子句。语法以下是SQLite中DELETE查询的语法- DELETEFROMtable_name[WHEREClause]PythonCopy例子假设我们使用以下查询创建了......
  • Python 环境配置(一)Python、Anaconda、Pycharm的安装
    Python环境配置(一)Python、Anaconda、Pycharm的安装本人之前已安装一次,此次为卸载之后的重新安装。。。一、Python1、下载下载官网:下载链接:DownloadPython|Python.org勾选添加到路径(环境变量)next如图所示之后点close关闭2、验证win+Rcmd:python退出ex......
  • Pycharm 设置 yaml 格式接口测试用例模板 (python+pytest+yaml)
    前言初次编写的伙伴们可能对yaml格式不太熟悉,自己写yaml用例的时候,总是格式对不齐啊记不住设定好的关键字啊等等等琐事是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。 pycharm操作集:1、File-Settings(快捷键Ctrl+Alt+S) 2、Live......
  • Python - Redirecting output of print to a file
    Theprintfunctioncanalsobeusedtowritetoafile.Theoutputofprint,thatisbydefault,senttothescreencanberedirectedtoanopenfile.Forthis,youhavetosupplythefileobjectasanargumentforthenamedparameterfile.Hereisanexa......
  • Python:添加到相对于当前运行脚本的 sys.path 的最佳方法
    我有一个充满脚本的目录(比如说project/bin)。我还有一个位于project/lib的库,并希望脚本自动加载它。这是我通常在每个脚本的顶部使用的:#!/usr/bin/pythonfromos.pathimportdirname,realpath,sep,pardirimportsyssys.path.append(dirname(realpath(_......
  • python身份证号码+姓名一致性核验、身份证号码真伪查询API集成
    身份证号码+姓名核验的方式,顾名思义是身份证二要素核验,一般情况下,身份证真伪查询需要上公安户籍系统查询,但此种方式仅适合个人查询,企业要想随时随地实现身份证实名认证的功能,便需要集成身份证实名认证接口功能。翔云人工智能开放平台提供身份证号实名认证接口,实时联网,上传身份证......