有没有办法限制 Polars 使用的线程数量?
我这样做是因为我正在围绕一些 Polars 代码进行第二层并行化,并且希望限制内部并行性。由于 SIMD 权限,这应该仍然比 Pandas 更好。
我是一个 python pandas 用户,但最近发现了关于 Polars 数据框,它看起来很有前途并且速度非常快。我无法找到在极坐标中打开 Excel 文件的方法。Polars 很高兴阅读csv、json等,但不是 excel。
我是 pandas 中 excel 文件的广泛用户,我想尝试使用极坐标。我在 Excel 中有很多工作表,pandas 自动读取。我怎样才能对极地做同样的事情?
我缺少什么?
我正在尝试从字典(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) 我有一些计算的浮点列。我想显示四舍五入的一列的值,但round(pl.col("value"), 2)在 Polars 中无法正确旋转。我怎样才能做到呢?
我有多个polars数据帧,我想将它们附加到现有的 Parquet 文件中。
df.write_parquet("path.parquet")覆盖现有的镶木地板文件。我怎样才能追加?
我有一个包含三列的数据集。将检查 A 列中的字符串。如果字符串匹配foo或spam,则同一行中其他两列L和 的值G应更改为XX。为此我尝试了以下方法。
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\nRun Code Online (Sandbox Code Playgroud)\n … 将 DataFrame 写入 csv 文件时,我想附加到该文件,而不是覆盖它。
虽然 pandas DataFrame 具有可用模式.to_csv()参数的方法,因此允许将 DataFrame 附加到文件中,但 Polars DataFrame 写入方法似乎都没有该参数。
我有一个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 列具有以下类型:
如前所述:“ content”列存储大文本(1 到 20 页文本),我需要对其进行预处理,并且我猜存储方式不同。 …
在此示例中,在 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?
我不确定 …
我是极地新手,不确定我是否.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-polars ×10
python ×6
dataframe ×4
append ×2
pandas ×2
writefile ×2
dictionary ×1
excel ×1
parquet ×1
python-3.x ×1