标签: python-polars

如何限制 Polar 中的线程数量

有没有办法限制 Polars 使用的线程数量?

我这样做是因为我正在围绕一些 Polars 代码进行第二层并行化,并且希望限制内部并行性。由于 SIMD 权限,这应该仍然比 Pandas 更好。

python-polars

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

如何在 Polars 数据框中打开 Excel 文件?

我是一个 python pandas 用户,但最近发现了关于 Polars 数据框,它看起来很有前途并且速度非常快。我无法找到在极坐标中打开 Excel 文件的方法。Polars 很高兴阅读csvjson等,但不是 excel。

我是 pandas 中 excel 文件的广泛用户,我想尝试使用极坐标。我在 Excel 中有很多工作表,pandas 自动读取。我怎样才能对极地做同样的事情?

我缺少什么?

python excel dataframe pandas python-polars

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

Polars 是否支持从嵌套字典创建数据框?

我正在尝试从字典(mainDict)创建一个极坐标数据框,其中mainDict的值之一是字典对象(nestedDicts)的列表。当我尝试这样做时,我收到一个错误(见下文),我不知道其含义。然而,pandas 确实允许我使用 mainDict 创建数据框。

我不确定我是否做错了什么,是否是一个错误,或者该操作是否根本不受极地支持。我不太担心找到解决方法,因为它应该很简单(欢迎提出建议),但如果可能的话,我想这样做。

我在 google colab 上使用的是 Polars 版本 0.13.38(问题也发生在 VScode 本地,使用 python 版本 3.9.6 和 Windows 10)。下面是重现问题及其输出的代码示例。谢谢!

输入:

import polars as pl
import pandas as pd

template = {    'a':['A', 'AA'],
                'b':['B', 'BB'],
                'c':['C', 'CC'],
                'd':[{'D1':'D2'}, {'DD1':'DD2'}]}

#create a dataframe using pandas
df_pandas = pd.DataFrame(template)
print(df_pandas)

#create a dataframe using polars
df_polars = pl.DataFrame(template)
print(df_polars)
Run Code Online (Sandbox Code Playgroud)

输出:

    a   b   c               d
0   A   B   C    {'D1': 'D2'}
1  AA  BB  CC  {'DD1': 'DD2'}
---------------------------------------------------------------------------
ComputeError                              Traceback (most recent …
Run Code Online (Sandbox Code Playgroud)

python dictionary dataframe python-polars

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

如何对 Polars 中的值进行四舍五入

我有一些计算的浮点列。我想显示四舍五入的一列的值,但round(pl.col("value"), 2)在 Polars 中无法正确旋转。我怎样才能做到呢?

dataframe python-polars

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

如何将数据从 Polars 附加到现有 Parquet

我有多个polars数据帧,我想将它们附加到现有的 Parquet 文件中。

df.write_parquet("path.parquet")覆盖现有的镶木地板文件。我怎样才能追加?

append writefile parquet python-polars

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

如何在极坐标中的多个条件下使用“when”、“then”和“otherwise”?

我有一个包含三列的数据集。将检查 A 列中的字符串。如果字符串匹配foospam,则同一行中其他两列L和 的值G应更改为XX。为此我尝试了以下方法。

\n
df = pl.DataFrame(\n    {\n        "A": ["foo", "ham", "spam", "egg",],\n        "L": ["A54", "A12", "B84", "C12"],\n        "G": ["X34", "C84", "G96", "L6",],\n    }\n)\nprint(df)\n\nshape: (4, 3)\n\xe2\x94\x8c\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\xac\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 L   \xe2\x94\x86 G   \xe2\x94\x82\n\xe2\x94\x82 ---  \xe2\x94\x86 --- \xe2\x94\x86 --- \xe2\x94\x82\n\xe2\x94\x82 str  \xe2\x94\x86 str \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\x90\xe2\x95\xaa\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\xa1\n\xe2\x94\x82 foo  \xe2\x94\x86 A54 \xe2\x94\x86 X34 \xe2\x94\x82\n\xe2\x94\x82 ham  \xe2\x94\x86 A12 \xe2\x94\x86 C84 \xe2\x94\x82\n\xe2\x94\x82 spam \xe2\x94\x86 B84 \xe2\x94\x86 G96 \xe2\x94\x82\n\xe2\x94\x82 egg  \xe2\x94\x86 C12 \xe2\x94\x86 L6  \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\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 …

python-polars

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

Polars 模块没有将 DataFrame 附加到输出文件的方法吗?

将 DataFrame 写入 csv 文件时,我想附加到该文件,而不是覆盖它。

虽然 pandas DataFrame 具有可用模式.to_csv()参数的方法,因此允许将 DataFrame 附加到文件中,但 Polars DataFrame 写入方法似乎都没有该参数。

python append writefile python-polars

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

北极熊与熊猫:体型和速度的差异

我有一个parquet文件(~1.5 GB),我想用polars. 生成的数据帧有 250k 行和 10 列。一栏里有大块的文本。

我刚刚开始使用极坐标,因为我听到了很多关于它的好消息。其中之一是它比 pandas 快得多。

这是我的问题:
数据帧的预处理相当慢,所以我开始与pandas. 我是否做错了什么,或者这个特定用例的极坐标只是速度较慢?如果是这样:有没有办法加快速度?

这是我的代码polars

import polars as pl

df = (pl.scan_parquet("folder/myfile.parquet")
      .filter((pl.col("type")=="Urteil") | (pl.col("type")=="Beschluss"))
      .collect()
     )
df.head()
Run Code Online (Sandbox Code Playgroud)

整个代码大约需要1 分钟,而仅过滤部分大约需要13 秒

我的代码在pandas

import pandas as pd 

df = (pd.read_parquet("folder/myfile.parquet")
    .query("type == 'Urteil' | type == 'Beschluss'") )
df.head()
Run Code Online (Sandbox Code Playgroud)

整个代码也大约需要1 分钟,而仅查询部分就需要<1 秒

数据框的 10 列具有以下类型:

  • i64
  • 斯特
  • 结构[7]
  • str(对于所有剩余的)

如前所述:“ content”列存储大文本(1 到 20 页文本),我需要对其进行预处理,并且我猜存储方式不同。 …

python dataframe pandas python-polars

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

根据特定列包含对列表中的对的行来过滤极坐标 DataFrame

在此示例中,在 columns 上["foo", "ham"],我希望删除第 1 行和第 4 行,因为它们与列表中的一对匹配

df = pl.DataFrame(
    {
        "foo": [1, 1, 2, 2, 3, 3, 4],
        "bar": [6, 7, 8, 9, 10, 11, 12],
        "ham": ["a", "b", "c", "d", "e", "f", "b"]
    }
)
pairs = [(1,"b"),(3,"e"),(4,"g")]
Run Code Online (Sandbox Code Playgroud)

以下内容对我有用,但我认为当数据框和对列表很大时这会出现问题。

for a, b in pairs:
    df = df.filter(~(pl.col('foo') == a) | ~(pl.col('ham') == b))
Run Code Online (Sandbox Code Playgroud)

我认为这是这个问题的 Pandas 实现Pandas: How to remove rows from a dataframe based on a tuples list made value in TWO columns?

我不确定 …

python python-3.x python-polars

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

使用极坐标时访问 .with_columns() 中新创建的列

我是极地新手,不确定我是否.with_columns()正确使用。

这是我经常遇到的情况:有一个数据框,在其中.with_columns(),我对列应用一些操作。例如,我将一些日期转换为str类型date,然后想要计算开始日期和结束日期之间的持续时间。我将按如下方式实现这一点。

import polars as pl 

pl.DataFrame(
    {
        "start": ["01.01.2019", "01.01.2020"],
        "end": ["11.01.2019", "01.05.2020"],
    }
).with_columns(
    [
        pl.col("start").str.strptime(pl.Date, fmt="%d.%m.%Y"),
        pl.col("end").str.strptime(pl.Date, fmt="%d.%m.%Y"),
    ]
).with_columns(
    [
        (pl.col("end") - pl.col("start")).alias("duration"),
    ]
)
Run Code Online (Sandbox Code Playgroud)

首先,我转换两列,然后.with_columns()再次调用。

像这样更短的东西是行不通的:

pl.DataFrame(
    {
        "start": ["01.01.2019", "01.01.2020"],
        "end": ["11.01.2019", "01.05.2020"],
    }
).with_columns(
    [
        pl.col("start").str.strptime(pl.Date, fmt="%d.%m.%Y"),
        pl.col("end").str.strptime(pl.Date, fmt="%d.%m.%Y"),
        (pl.col("end") - pl.col("start")).alias("duration"),
    ]
)
Run Code Online (Sandbox Code Playgroud)

有没有办法避免调用.with_columns()两次并以更紧凑的方式编写?

python python-polars

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