Pandas:使用 Xarray 限制 __repr__ 和 _repr_html_ 行为

问题描述 投票:0回答:1

我在数据框中存储大型 xarray,但每次在 Jupyter 或终端中显示数据框时,都需要很长时间(10 行数据框需要 11 秒)。我想这与 pandas 如何从各个单元格获取任何 repr 信息有关,并将整个 xarray 推入其中,但事后截断显示?谁知道?

是否有一些 pandas 设置会限制此行为?

这是代码:




import pandas as pd
import numpy as np
import xarray as xr


df = pd.DataFrame({'xarrays':[xr.DataArray(np.random.randn(50,50)) 
                                for  _ in range(10)], # 10 50x50 xarrays
                    'other_stuff':np.arange(10)})

附图显示了显示整个帧、xarray 系列和普通系列的时间,但快速细分:

显示类型 时间
整个df 11秒
Xarray系列 6 秒
普通系列 0 秒
直接显示 df repr_html 0.2秒

enter image description here

预计可以轻松显示缩写/截断的 xarray 行。仅显示就花费了太长时间。

python pandas jupyter-notebook python-xarray
1个回答
0
投票

解决了!显然我正在寻找的选项是pandas的display.pprint_nest_depth。将其限制为 1 后,速度大大加快,但我还不确定这意味着什么。

# ------- Same dataframe as before ----------------

import pandas as pd
import numpy as np
import xarray as xr


df = pd.DataFrame({'xarrays':[xr.DataArray(np.random.randn(50,50)) 
                                for  _ in range(10)], # 10 50x50 xarrays
                    'other_stuff':np.arange(10)})

# ------- Experimenting with pprint settings ----------------

import IPython.display

# NOTE apparently my computer has sped up a bit, so the default display speed has sped up from 11 seconds to 5 seconds
# but that is still way to slow

pd.set_option('display.pprint_nest_depth',3) # (default)

IPython.display.display(df) # 5.4 seconds 
IPython.display.display(df.xarrays) # 2.7 seconds (default)

pd.set_option('display.pprint_nest_depth',2) 
IPython.display.display(df)# also 5.4 seconds
IPython.display.display(df.xarrays)# also 2.7 seconds

pd.set_option('display.pprint_nest_depth',1) 

# SUCCESS!
IPython.display.display(df)# 0.2 seconds
IPython.display.display(df.xarrays)# 0.1 seconds
© www.soinside.com 2019 - 2024. All rights reserved.