如何在不转换为 Pandas 的情况下将 Polars 与 Plotly 一起使用?
How to use Polars with Plotly without converting to Pandas?
我想用 Polars 替换 Pandas,但我无法找到如何在不转换为 Pandas 的情况下将 Polars 与 Plotly 一起使用。我想知道是否有办法完全切断 Pandas 的过程。
考虑以下测试数据:
import polars as pl
import numpy as np
import plotly.express as px
df = pl.DataFrame(
{
"nrs": [1, 2, 3, None, 5],
"names": ["foo", "ham", "spam", "egg", None],
"random": np.random.rand(5),
"groups": ["A", "A", "B", "C", "B"],
}
)
fig = px.bar(df, x='names', y='random')
fig.show()
我希望此代码在 Jupyter 笔记本中显示条形图,但 returns 出现错误:
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/polars/internals/frame.py:1483: UserWarning: accessing series as Attribute of a DataFrame is deprecated
warnings.warn("accessing series as Attribute of a DataFrame is deprecated")
可以使用 df = df.to_pandas()
将 Polars 数据帧转换为 Pandas 数据帧。然后,它起作用了。但是,有没有其他更简单优雅的解决方案呢?
是的,不需要Pandas参与。有人 (sa-) has requested supporting a better option here 并包含了解决方法。
"The workaround that I use right now is px.line(x=df["a"], y=df["b"]), but it gets unwieldy if the name of the data frame is too big"
解决方法中包含的示例更简单。
对于 OP 的代码示例,我发现除了指定数据框列外,还可以转换为列表:
import polars as pl
import numpy as np
import plotly.express as px
df = pl.DataFrame(
{
"nrs": [1, 2, 3, None, 5],
"names": ["foo", "ham", "spam", "egg", None],
"random": np.random.rand(5),
"groups": ["A", "A", "B", "C", "B"],
}
)
px.bar(df, x=list(df["names"]), y=list(df["random"]))
更好地了解极地,一旦您看到解决方法的想法,您可能会看到一些其他选项。
发布 there 的示例更简单,而不是像 Pandas 数据帧那样使用 px.line(df, x="a", y="b")
,而是使用 px.line(x=df["a"], y=df["b"]
。有极坐标,即:
import polars as pl
import plotly.express as px
df = pl.DataFrame({"a":[1,2,3,4,5], "b":[1,4,9,16,25]})
px.line(x=df["a"], y=df["b"])
我想用 Polars 替换 Pandas,但我无法找到如何在不转换为 Pandas 的情况下将 Polars 与 Plotly 一起使用。我想知道是否有办法完全切断 Pandas 的过程。
考虑以下测试数据:
import polars as pl
import numpy as np
import plotly.express as px
df = pl.DataFrame(
{
"nrs": [1, 2, 3, None, 5],
"names": ["foo", "ham", "spam", "egg", None],
"random": np.random.rand(5),
"groups": ["A", "A", "B", "C", "B"],
}
)
fig = px.bar(df, x='names', y='random')
fig.show()
我希望此代码在 Jupyter 笔记本中显示条形图,但 returns 出现错误:
/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/polars/internals/frame.py:1483: UserWarning: accessing series as Attribute of a DataFrame is deprecated
warnings.warn("accessing series as Attribute of a DataFrame is deprecated")
可以使用 df = df.to_pandas()
将 Polars 数据帧转换为 Pandas 数据帧。然后,它起作用了。但是,有没有其他更简单优雅的解决方案呢?
是的,不需要Pandas参与。有人 (sa-) has requested supporting a better option here 并包含了解决方法。
"The workaround that I use right now is px.line(x=df["a"], y=df["b"]), but it gets unwieldy if the name of the data frame is too big"
解决方法中包含的示例更简单。
对于 OP 的代码示例,我发现除了指定数据框列外,还可以转换为列表:
import polars as pl
import numpy as np
import plotly.express as px
df = pl.DataFrame(
{
"nrs": [1, 2, 3, None, 5],
"names": ["foo", "ham", "spam", "egg", None],
"random": np.random.rand(5),
"groups": ["A", "A", "B", "C", "B"],
}
)
px.bar(df, x=list(df["names"]), y=list(df["random"]))
更好地了解极地,一旦您看到解决方法的想法,您可能会看到一些其他选项。
发布 there 的示例更简单,而不是像 Pandas 数据帧那样使用 px.line(df, x="a", y="b")
,而是使用 px.line(x=df["a"], y=df["b"]
。有极坐标,即:
import polars as pl
import plotly.express as px
df = pl.DataFrame({"a":[1,2,3,4,5], "b":[1,4,9,16,25]})
px.line(x=df["a"], y=df["b"])