我对 Polar 还比较陌生。我对其运作有一些疑问。我可以在 Polars 中执行这样的操作,
df = df.with_columns(((pl.col("netsales")/pl.col("sold_quantity")).alias("net_div"))
Run Code Online (Sandbox Code Playgroud)
同样可以使用以下方法实现,
df = df.with_columns((df["netsales"]/df["sold_quantity"]).alias("net_div"))
Run Code Online (Sandbox Code Playgroud)
就性能而言,它们之间有什么区别吗?
还,
df = df.with_columns((df["netsales"]/df["sold_quantity"]).alias("net_mul"),
(df["netsales"]+df["sold_quantity"]).alias("net_add")
)
Run Code Online (Sandbox Code Playgroud)
上述操作可以像这样单独完成,
df = df.with_columns((df["netsales"]/df["sold_quantity"]).alias("net_mul"))
df = df.with_columns((df["netsales"]+df["sold_quantity"]).alias("net_add"))
Run Code Online (Sandbox Code Playgroud)
上述两种方式执行相同的操作在性能上有什么区别吗?我在网上找不到与此相关的任何答案或文档。如果您能分享一些这方面的知识,我将感谢您的支持。
我有一个数据框:
df = pl.DataFrame(
{
"t_left": [0.0, 1.0, 2.0, 3.0],
"t_right": [1.0, 2.0, 3.0, 4.0],
"counts": [1, 2, 3, 4],
}
)
Run Code Online (Sandbox Code Playgroud)
我想将每一行映射到一个列表中,然后收集所有值(要传递到 例如matplotlib.hist)
我可以手动完成,如下所示:
times = []
for t_left, t_right, counts in df.rows():
times.extend(np.linspace(t_left, t_right, counts + 1)[1:])
Run Code Online (Sandbox Code Playgroud)
但这对于我的数据集来说太慢了。
我对 python 和 Polars 都是全新的,所以我想知道是否有更好的方法来实现这一点。
编辑
完整的复制粘贴示例以重现。
import polars as pl
import numpy as np
size = 1000000
df = pl.DataFrame(
{
"t_left": np.random.rand(size),
"t_right": np.random.rand(size) + 1,
"counts": [1] * size,
}
)
times = []
for …Run Code Online (Sandbox Code Playgroud) 我有一个 LazyFrame,其中包含几个时期内的多列每小时数据。对于每个周期,我想找到涉及多列数学运算的函数的 x 值,以最小化结果。
\n我使用 scipy.optimize.minimize 来完成此操作,并且实际上获得了所需的结果。问题是这个过程运行得非常慢,所以我只是在寻找任何能完成相同但更快的事情。
\n def minimization_target(x, period_start):\n return hourly_data.filter(pl.col('period_start') == period_start).select((((pl.col('price').median() * pl.col('quantity').median() - (pl.col('estimated_quantity') * (pl.col('estimated_price') + x)).sum()) / (pl.col('key_product') * (pl.col('estimated_price') + x)).sum())).abs() - 1).abs()).collect().item()\n\n results = hourly_data.group_by('period_start', maintain_order=True).map_groups(lambda group: pl.DataFrame({'x_values': scipy.optimize.minimize(minimization_target, group.get_column('initial_guess').median(), args=group.get_column('period_start').median()).x}), schema=None)\nRun Code Online (Sandbox Code Playgroud)\n最小的例子:
\nimport scipy\nimport polars as pl\nfrom datetime import datetime\n\nhourly_data = pl.DataFrame({'period': [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3], 'price': …Run Code Online (Sandbox Code Playgroud) 极坐标中的pandas.DataFrame.query相当于什么?
import pandas as pd
data= {
'A':["Polars","Python","Pandas"],
'B' :[23000,24000,26000],
'C':['30days', '40days',np.nan],
}
df = pd.DataFrame(data)
A B C
0 Polars 23000 30days
1 Python 24000 40days
2 Pandas 26000 NaN
Run Code Online (Sandbox Code Playgroud)
现在,定义一个变量item
item=24000
df.query("B>= @item")
A B C
1 Python 24000 40days
2 Pandas 26000 NaN
Run Code Online (Sandbox Code Playgroud)
现在,使用极坐标:
import polars as pl
df = pl.DataFrame(data)
item=24000
df.query("B>= @item")
Run Code Online (Sandbox Code Playgroud)
我得到:
AttributeError: 'DataFrame' object has no attribute 'query'
Run Code Online (Sandbox Code Playgroud)
我的大胆猜测是,df.filter()但语法看起来不一样,而且看起来也filter相当于?df.loc[]
我想将极坐标中类型为 datetype[ms] 的列转换为 datetime[ns] 。有没有简单的方法可以做到这一点?我认为使用 datetime[ms] 时 group_by_dynamic 有问题,我想测试一下
为了有效地将大型数据集加载到 Polars 中,可以使用惰性 API 和函数scan_*。当我们执行聚合时,这很有效(因此我们有一个大的输入数据集,但一个小的结果)。但是,如果我想完整地处理一个大数据集(例如,更改列的每一行中的值),似乎无法使用collect整个(结果)数据集并将其加载到内存中。
是否可以直接将 LazyFrame 写入磁盘,并按顺序对数据集的块进行处理,以限制内存使用?
如何在Python中将极地系列转换为熊猫系列?
我当前的解决方法是:
df = pl.DataFrame({"a":[1,1,2], "b":[2,2,3], "c":[1,2,3]})
df[["a"]].to_pandas()["a"]
Run Code Online (Sandbox Code Playgroud)
但是有没有办法直接从polls系列转到pandas系列呢?
我之所以需要这个是因为我将数据输入 statmodels.OLS 并希望使用变量名称而不是变量数字。当我直接从极坐标将数据输入 statmodels.OLS 时,出现以下错误:
unrecognized data structures: <class 'polars.internals.series.Series'> / <class 'polars.internals.frame.DataFrame'>
Run Code Online (Sandbox Code Playgroud) 如果我有一个列,我可以使用该over方法在组内对该列进行排序。例如,
import polars as pl\n\ndf = pl.DataFrame({\'group\': [2,2,1,1,2,2], \'value\': [3,4,3,1,1,3]})\n \ndf.with_column(pl.col(\'value\').sort().over(\'group\'))\n# shape: (6, 2)\n# \xe2\x94\x8c\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\x90\n# \xe2\x94\x82 group \xe2\x94\x86 value \xe2\x94\x82\n# \xe2\x94\x82 --- \xe2\x94\x86 --- \xe2\x94\x82\n# \xe2\x94\x82 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\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\xa1\n# \xe2\x94\x82 2 \xe2\x94\x86 1 \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\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\x94\xa4\n# \xe2\x94\x82 2 \xe2\x94\x86 3 \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\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\x94\xa4\n# \xe2\x94\x82 1 \xe2\x94\x86 1 \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\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\x94\xa4\n# \xe2\x94\x82 1 \xe2\x94\x86 3 \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\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\x94\xa4\n# \xe2\x94\x82 2 \xe2\x94\x86 3 \xe2\x94\x82\n# \xe2\x94\x9c\xe2\x95\x8c\xe2\x95\x8c\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\x94\xa4\n# \xe2\x94\x82 2 \xe2\x94\x86 4 \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\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\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该操作的优点在于它保持了组的顺序(例如,group=1 仍然是第 3 行和第 4 行;group=2 仍然是第 1、2、5 和 …
如何将一列 i64 纪元字符串转换为极坐标中的日期?
我有一列 i64 代表自纪元以来的秒数,我想将它们解析为极坐标本机日期时间。