标签: python-polars

Pandas `.isna()` 方法的 Polars 等价物是什么?

我正在尝试在生产代码中用Polars替换 Pandas ,以获得更好的内存性能。

Pandas 方法的 Polars 等效项是什么.isna()?我在文档中找不到任何好的等效内容。

python-polars

7
推荐指数
1
解决办法
7308
查看次数

Polars:在列名称中搜索和替换

这曾经是pandas这样处理的:

df.columns = df.columns.str.replace('.','_')
Run Code Online (Sandbox Code Playgroud)

这段代码可以工作,但绝对不是正确的解决方案。

renamed = {}
for column_name in list(filter(lambda x: '.' in  x, df.columns)):
    renamed[column_name] = column_name.replace('.', '_')
df = df.rename(renamed)
Run Code Online (Sandbox Code Playgroud)

谢谢

python-polars

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

将 pandas 数据帧转换为 Polars 数据帧时出错(pyarrow.lib.ArrowTypeError:预期字节,得到“int”对象)

我正在将 pandas 数据帧转换为 Polars 数据帧,但 pyarrow 抛出错误。

我的代码:

import polars as pl
import pandas as pd

if __name__ == "__main__":

    with open(r"test.xlsx", "rb") as f:
        excelfile = f.read()
    excelfile = pd.ExcelFile(excelfile)
    sheetnames = excelfile.sheet_names
    df = pd.concat(
        [
            pd.read_excel(
            excelfile, sheet_name=x, header=0)
                    for x in sheetnames
                    ], axis=0)

    df_pl = pl.from_pandas(df)
Run Code Online (Sandbox Code Playgroud)

错误:

File "pyarrow\array.pxi", line 312, in pyarrow.lib.array

File "pyarrow\array.pxi", line 83, in pyarrow.lib._ndarray_to_array

File "pyarrow\error.pxi", line 122, in pyarrow.lib.check_status

pyarrow.lib.ArrowTypeError: Expected bytes, got a 'int' object

我尝试将 pandas dataframe …

dataframe pandas python-polars

7
推荐指数
1
解决办法
4万
查看次数

如何在 PyCharm 中显示 Polars 数据框

在 PyCharm 中,您可以使用 SciView 工具显示 Pandas 数据框。Polars 也可以这样做吗?还是我必须发送垃圾邮件print邮件吗?

(我还开了一张 PyCharm 支持票)

jetbrains-ide pycharm python-polars

7
推荐指数
1
解决办法
1739
查看次数

Polars - 将列中的部分字符串替换为其他列的值

所以我有一个像这样的 Polars 数据框

df = pl.DataFrame(
    {
        "ItemId": [15148, 15148, 24957],
        "SuffixFactor": [19200, 200, 24],
        "ItemRand": [254, -1, -44],
        "Stat0": ['+5 Defense', '+$i Might', '+9 Vitality'],
        "Amount": ['', '7', '']
    }
)
Run Code Online (Sandbox Code Playgroud)

每当 Stat0 包含 i$ 时,我想用 Amount 替换“Stat0”列中的 $i

我尝试了几种不同的方法,例如:

df = df.with_column(
    pl.col('Stat0').str.replace(r'\$i', pl.col('Amount'))
)
Run Code Online (Sandbox Code Playgroud)

预期结果

result = pl.DataFrame(
    {
        "ItemId": [15148, 15148, 24957],
        "SuffixFactor": [19200, 200, 24],
        "ItemRand": [254, -1, -44],
        "Stat0": ['+5 Defense', '+7 Might', '+9 Vitality'],
        "Amount": ['', '7', '']
    }
)
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。

我希望有人能帮帮忙。

此致

python string replace python-polars

7
推荐指数
1
解决办法
4662
查看次数

极坐标比 numpy 慢?

我正在考虑在解析问题polars中使用 in 代替numpy,将结构化文本文件转换为字符表并在不同的列上进行操作。然而,这似乎比我执行的大多数操作polars慢大约 5 倍。numpy我想知道为什么会出现这种情况,以及考虑到应该polars更快,我是否做错了什么。

例子:

import requests
import numpy as np
import polars as pl

# Download the text file
text = requests.get("https://files.rcsb.org/download/3w32.pdb").text

# Turn it into a 2D array of characters
char_tab_np = np.array(file.splitlines()).view(dtype=(str,1)).reshape(-1, 80)

# Create a polars DataFrame from the numpy array
char_tab_pl = pl.DataFrame(char_tab_np)

# Sort by first column with numpy
char_tab_np[np.argsort(char_tab_np[:,0])]

# Sort by first column with polars
char_tab_pl.sort(by="column_0")
Run Code Online (Sandbox Code Playgroud)

使用%%timeitin 时Jupyter …

python numpy python-polars

6
推荐指数
1
解决办法
2367
查看次数

使用 Polars 实现 qcut 功能

我一直在使用 Polars,但它似乎缺乏 pandas 那样的 qcut 功能。

我不确定原因,但是使用当前可用的 Polars 功能是否可以达到与 pandas qcut 相同的效果?

下面显示了一个关于我可以使用 pandas qcut 做什么的示例。

import pandas as pd

data = pd.Series([11, 1, 2, 2, 3, 4, 5, 1, 2, 3, 4, 5])
pd.qcut(data, [0, 0.2, 0.4, 0.6, 0.8, 1], labels=['q1', 'q2', 'q3', 'q4', 'q5'])
Run Code Online (Sandbox Code Playgroud)

结果如下:

0     q5
1     q1
2     q1
3     q1
4     q3
5     q4
6     q5
7     q1
8     q1
9     q3
10    q4
11    q5
dtype: category
Run Code Online (Sandbox Code Playgroud)

所以,我很好奇如何使用极坐标得到相同的结果?

感谢您的帮助。

python python-polars

6
推荐指数
1
解决办法
874
查看次数

Python Polars:如何获取 DataFrame 的行数?

我的 CSV 文件大小为 70 GB。我想在惰性模式下加载 DF 并计算行数。最好的方法是什么?

据我所知,根据文档,在惰性模式下没有像 shape 这样的函数。我发现这个答案提供了一个不基于 Polars 的解决方案,但我想知道是否也可以在 Polars 中做到这一点。

python dataframe python-polars

6
推荐指数
1
解决办法
1万
查看次数

如何对极坐标中的行进行自定义排序

如何按特定顺序对行进行排序

df = pl.DataFrame({"currency": ["EUR","EUR","EUR","USD","USD","USD"], "alphabet": ["A","B","C","A","B","C"]})
Run Code Online (Sandbox Code Playgroud)

我需要按货币和自定义字母顺序降序

预计会是这样的

货币 字母
美元 C
美元 A
美元
欧元 C
欧元 A
欧元

python-polars

6
推荐指数
1
解决办法
1428
查看次数

减少 unique() 中的 Polars 内存消耗

我有一个适合 RAM 的数据集,但当我运行某些方法(例如df.unique(). 我的笔记本电脑有 16GB 内存。我正在使用 14GB RAM 运行 WSL。我使用的是 Polars 版本 0.18.4。运行df.estimated_size()表明,当我读入数据集时,我的数据集约为 6GB。我的数据的架构是

index: Int64
first_name: Utf8
last_name: Utf8
race: Utf8
pct_1: Float64
pct_2: Float64
pct_3: Float64
pct_4: Float64
Run Code Online (Sandbox Code Playgroud)
index: Int64
first_name: Utf8
last_name: Utf8
race: Utf8
pct_1: Float64
pct_2: Float64
pct_3: Float64
pct_4: Float64
Run Code Online (Sandbox Code Playgroud)

但是,我无法在不收到 SIGKILL 信号的情况下执行诸如.unique().drop_nulls()等任务。我正在使用 LazyFrames。

例如,

size = pl.read_parquet("data.parquet").estimated_size()
df = pl.scan_parquet("data.parquet") # use LazyFrames
Run Code Online (Sandbox Code Playgroud)

导致内存不足错误。我可以通过编写自定义函数来回避这个问题。

df = df.drop_nulls().collect(streaming=True)
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么后者有效而前者无效,因为数据集的最大版本(当我最初读入它时)适合 RAM。

不幸的是,我无法想出类似的技巧来做同样的事情.unique()。我可以做些什么来.unique()减少内存占用吗?我努力了:

def …
Run Code Online (Sandbox Code Playgroud)

python out-of-memory python-polars

6
推荐指数
0
解决办法
749
查看次数