我在数据框中存储大型 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秒 |
预计可以轻松显示缩写/截断的 xarray 行。仅显示就花费了太长时间。
解决了!显然我正在寻找的选项是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