标签: python-polars

数据框中列表列的极坐标交集

import polars as pl

df = pl.DataFrame({'a': [[1, 2, 3], [8, 9, 4]], 'b': [[2, 3, 4], [4, 5, 6]]})
Run Code Online (Sandbox Code Playgroud)

所以给定数据框 df

    a           b
[1, 2, 3]   [2, 3, 4]
[8, 9, 4]   [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我想要一个c列,它是a和b的交集

    a           b          c
[1, 2, 3]   [2, 3, 4]    [2, 3]
[8, 9, 4]   [4, 5, 6]     [4]
Run Code Online (Sandbox Code Playgroud)

我知道我可以将 apply 函数与 python 集交集一起使用,但我想使用极坐标表达式来实现。

python-polars

2
推荐指数
1
解决办法
2650
查看次数

在Python中,极性将json字符串列转换为字典以进行过滤

你好,有一个数据框,其中有一个名为标签的列,它是一个 json 字符串。

我想在标签列上过滤此数据框,以便它仅包含存在特定标签键或标签具有特定值的行。

我想我可以做一个字符串包含匹配,但认为首先将 json 转换为字典并使用 has_key 等可能会更强大?

在 python Polars 中推荐的方法是什么?

谢谢

rust-polars python-polars

2
推荐指数
1
解决办法
4539
查看次数

仅在 Polars 数据框中删除选定列上的空值

我正在尝试删除所选列列表中的空值。但看来我的操作可能with_columns不太对劲。如果您只想对选定的列进行删除操作,正确的方法是什么?

\n
df = pl.DataFrame(\n    {\n        "id": ["NY", "TK", "FD"], \n        "eat2000": [1, None, 3], \n        "eat2001": [-2, None, 4],\n        "eat2002": [None, None, None],\n        "eat2003": [-9, None, 8],\n        "eat2004": [None, None, 8]\n    }\n); df\n\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 id  \xe2\x94\x86 eat2000 \xe2\x94\x86 eat2001 \xe2\x94\x86 eat2002 \xe2\x94\x86 eat2003 \xe2\x94\x86 eat2004 \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 ---     \xe2\x94\x86 ---     \xe2\x94\x86 ---     \xe2\x94\x86 ---     \xe2\x94\x86 ---     \xe2\x94\x82\n\xe2\x94\x82 str \xe2\x94\x86 i64     \xe2\x94\x86 i64     \xe2\x94\x86 f64     \xe2\x94\x86 i64     \xe2\x94\x86 i64     \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 NY  \xe2\x94\x86 1       \xe2\x94\x86 -2      \xe2\x94\x86 null    \xe2\x94\x86 …
Run Code Online (Sandbox Code Playgroud)

python python-polars

2
推荐指数
1
解决办法
9530
查看次数

获取极坐标系中每一行的累加值

例如,如果我有

import polars as pl
df = pl.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
Run Code Online (Sandbox Code Playgroud)

我如何找到每一行的累积和?

预期输出:

    a   b
0   1   5
1   2   7
2   3   9
Run Code Online (Sandbox Code Playgroud)

这是 pandas 中的等效项:

    a   b
0   1   5
1   2   7
2   3   9
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在极地做到这一点

python pandas python-polars

2
推荐指数
1
解决办法
2621
查看次数

如何使用 cumfold 或 cumreduce 创建有状态列

我正在尝试创建一个列,该列会更改目标列中每个 1/True 的值,并保留先前的 0/False 值。例如如何从中得到

\n
a = pl.DataFrame({'a': [1, 0, 0, 0, 1, 0, 0, 1]})\nprint(a)\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a   \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 1   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

这个数据框

\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 a   \xe2\x94\x86 b          \xe2\x94\x82\n\xe2\x94\x82 --- \xe2\x94\x86 ---        \xe2\x94\x82\n\xe2\x94\x82 i64 \xe2\x94\x86 str        \xe2\x94\x82\n\xe2\x95\x9e\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xaa\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa1\n\xe2\x94\x82 1   \xe2\x94\x86 new_value1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x86 new_value1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x86 new_value1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x86 new_value1 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 1   \xe2\x94\x86 new_value2 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xbc\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x95\x8c\xe2\x94\xa4\n\xe2\x94\x82 0   \xe2\x94\x86 new_value2 …
Run Code Online (Sandbox Code Playgroud)

dataframe python-polars

2
推荐指数
1
解决办法
186
查看次数

Polars:通过算法取消嵌套列,无需 for 循环

我正在使用用嵌套结构(有时是多层深度)编写的多个镶木地板数据集。我需要输出一个扁平的(无结构)模式。现在我能想到的唯一方法是使用 for 循环来迭代列。这是一个简单的例子,我在其中进行循环。

while len([x.name for x in df if x.dtype == pl.Struct]) > 0:
    for col in df:
        if col.dtype == pl.Struct:
            df = df.unnest(col.name)
Run Code Online (Sandbox Code Playgroud)

这可行,也许这是唯一的方法,如果是这样,了解这一点会很有帮助。但 Polars 非常简洁,我想知道是否有一种更实用的方法可以做到这一点,而无需所有循环并将 df 重新分配给自身。

python-polars

2
推荐指数
1
解决办法
3630
查看次数

操作 Polars 中的数据

一个愚蠢的问题。如何操作 Polars 中的列?

明确地说,我有一个包含 3 列的表: N ,幸存者,死亡

我想用 Deaths * N 替换 Deaths,用 Survivors * N 替换 Survivors

以下代码不起作用

table["SURVIVORS"] = table["SURVIVORS"]*table["N"]
Run Code Online (Sandbox Code Playgroud)

我有这个错误:

TypeError: 'DataFrame' object does not support 'Series' assignment by index. Use 'DataFrame.with_columns'
Run Code Online (Sandbox Code Playgroud)

谢谢

python python-polars

2
推荐指数
1
解决办法
1563
查看次数

Polars 将性能应用于自定义功能

除了一种情况外,我很享受 Polars 比 Pandas 的显着加速。我是 Polars 的新手,所以这可能只是我的错误用法。无论如何,这里是玩具示例:在单列上,我需要在我的情况下应用自定义函数,它来自parseprobablypeoplehttps://github.com/datamade/probablepeople),但问题是通用的。

Plain pandasapply与 Polars 具有相似的运行时间,但是带有parallel_applyfrom ( https://github.com/nalepae/pandaralel ) 的 pandas 的加速与核心数量成正比。

在我看来,Polars 仅使用单核来实现自定义功能,或者我错过了什么?

如果我正确使用 Polars,也许有可能创建像pandaralellPolars 这样的工具?

!pip install probablepeople
!pip install pandarallel

import pandas as pd
import probablepeople as pp
import polars as pl
from pandarallel import pandarallel

AMOUNT = 1000_000
#Pandas:
df = pd.DataFrame({'a': ["Mr. Joe Smith"]})
df = df.loc[df.index.repeat(AMOUNT)].reset_index(drop=True)

df['b'] = df['a'].apply(pp.parse)

#Pandarallel:
pandarallel.initialize(progress_bar=True)
df['b_multi'] = df['a'].parallel_apply(pp.parse)

#Polars:
dfp = …
Run Code Online (Sandbox Code Playgroud)

apply pandas python-polars

2
推荐指数
1
解决办法
1636
查看次数

使用索引进行选择是 Polars 中的反模式:如何解析和转换(选择/过滤?)似乎需要这样的 CSV?

我想使用 Pola-rs 阅读来自 Rigol MSO5000 示波器的以下(在我看来相当糟糕的)CSV:

D7-D0,D15-D8,t0 = -25.01s, tInc = 2e-06,
+2.470000E+02,2.000000E+00,,
+1.590000E+02,1.600000E+01,,
+2.400000E+02,2.000000E+00,,
+2.470000E+02,+1.300000E+02,,
+1.590000E+02,1.800000E+01,,
+2.470000E+02,+1.300000E+02,,
9.500000E+01,1.800000E+01,,
9.500000E+01,1.800000E+01,,
+2.400000E+02,0.000000E+00,,
(...)
Run Code Online (Sandbox Code Playgroud)

这是我当前的 Jupyter Notebook 迭代/尝试,然后发现Pola-rs 不鼓励使用索引进行选择

D7-D0,D15-D8,t0 = -25.01s, tInc = 2e-06,
+2.470000E+02,2.000000E+00,,
+1.590000E+02,1.600000E+01,,
+2.400000E+02,2.000000E+00,,
+2.470000E+02,+1.300000E+02,,
+1.590000E+02,1.800000E+01,,
+2.470000E+02,+1.300000E+02,,
9.500000E+01,1.800000E+01,,
9.500000E+01,1.800000E+01,,
+2.400000E+02,0.000000E+00,,
(...)
Run Code Online (Sandbox Code Playgroud)

当我在 Polars Discord 上被告知这个问题可能无法通过数据帧库得到最佳解决时,这是我的低级 CSV 解析 Rust 伪代码方法:

import polars as pl

df = pl.read_csv("normal0.csv")

# Grab initial condition and increments
t0 = df.columns[2]; assert "t0" in t0; t0 = float(t0.split('=')[1].replace('s', '').strip())
tinc = …
Run Code Online (Sandbox Code Playgroud)

csv oscilloscope rust rust-polars python-polars

2
推荐指数
1
解决办法
421
查看次数