IPython / Jupyter:如何自定义显示功能
IPython / Jupyter: how to customize the display function
在 IPython / JupyterLab 中显示内容时,我遇到了 3 个基本问题。
(1) 我有一个包含许多列的 pandas 数据框。首先,我确保我能看到它的一部分:
import numpy as np
import pandas as pd
np.set_printoptions(linewidth=240,edgeitems=5,precision=3)
pd.set_option('display.width',1800) #number of pixels of the output
pd.set_option('display.max_columns',100) #replace the number with None to print all columns
pd.set_option('display.max_rows',10) #max_columns/max_rows sets the maximum number of columns/rows displayed when a frame is pretty-printed
pd.set_option('display.min_rows',9) #once max_rows is exceeded, min_rows determines how many rows are shown in the truncated representation
pd.set_option('display.precision',3) #number of digits in the printed float number
如果我打印它,所有内容都会混合在一起:
enter image description here
是否可以 打印文本宽度 ,即每行(即使更长)在输出中仅打印在 1 行上,当行宽于 window?
(2) 如果我显示提到的数据框,它看起来非常好(有一个滑块),但一些字符串条目显示超过 4 行:
enter image description here
如何确保每个 条目都显示在 1 行中?
(3) 下面的代码产生输出,效果很好:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.1,30,1000);
fig,ax=plt.subplots(1, 4, constrained_layout=True, figsize=[15,2])
ax=ax.ravel()
ax[0].plot( x, np.sin(x))
ax[1].plot( x, np.log(1+x))
ax[2].plot( x, np.sin(30/x))
ax[3].plot( x, np.sin(x)*np.sin(2*x))
plt.show()
enter image description here
但是,当我将 [15,2]
更改为 [35,2]
时,数字将只与 window 一样宽。我怎样才能实现更大的宽度生成一个滑块(比如数据框的显示)以便我可以制作任意宽度的图像?
您已经通过决定使用 (2) 中的方法显示数据框解决了 (1)。在我看来,使用 print
显示数据框不是很有用。
(2):display(df)
自动使用空格来包装单元格内容。我没有找到禁用此行为的 pandas 选项。幸运的是,其他人已经遇到了同样的问题,另一个人提供了 .
您必须更改数据框的样式属性。为此,您使用 Styler
,它包含样式化的数据框。我做了一个简短的示例,您可以从中复制以下行:
import pandas as pd
# Construct data frame content
long_text = 'abcabcabc ' * 10
long_row = [long_text for _ in range(45)]
long_table = [long_row for _ in range(15)]
# Create dataframe
df = pd.DataFrame(long_table)
# Select data you want to output
# df_selected = df.head(5) # First five rows
# df_selected = df.tail(5) # Last five rows
df_selected = df.iloc[[1,3, 7]] # Select row 1,3 and 7
# Create styler of df_selected with changed style of white spaces
dataframe_styler = df_selected.style.applymap(lambda x:'white-space:nowrap')
# Display styler
display(dataframe_styler)
输出:
(3) 正如我在评论中提到的,您只需双击图表,它就会显示一个滑块。
在 IPython / JupyterLab 中显示内容时,我遇到了 3 个基本问题。
(1) 我有一个包含许多列的 pandas 数据框。首先,我确保我能看到它的一部分:
import numpy as np
import pandas as pd
np.set_printoptions(linewidth=240,edgeitems=5,precision=3)
pd.set_option('display.width',1800) #number of pixels of the output
pd.set_option('display.max_columns',100) #replace the number with None to print all columns
pd.set_option('display.max_rows',10) #max_columns/max_rows sets the maximum number of columns/rows displayed when a frame is pretty-printed
pd.set_option('display.min_rows',9) #once max_rows is exceeded, min_rows determines how many rows are shown in the truncated representation
pd.set_option('display.precision',3) #number of digits in the printed float number
如果我打印它,所有内容都会混合在一起: enter image description here 是否可以 打印文本宽度 ,即每行(即使更长)在输出中仅打印在 1 行上,当行宽于 window?
(2) 如果我显示提到的数据框,它看起来非常好(有一个滑块),但一些字符串条目显示超过 4 行: enter image description here
如何确保每个 条目都显示在 1 行中?
(3) 下面的代码产生输出,效果很好:
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0.1,30,1000);
fig,ax=plt.subplots(1, 4, constrained_layout=True, figsize=[15,2])
ax=ax.ravel()
ax[0].plot( x, np.sin(x))
ax[1].plot( x, np.log(1+x))
ax[2].plot( x, np.sin(30/x))
ax[3].plot( x, np.sin(x)*np.sin(2*x))
plt.show()
enter image description here
但是,当我将 [15,2]
更改为 [35,2]
时,数字将只与 window 一样宽。我怎样才能实现更大的宽度生成一个滑块(比如数据框的显示)以便我可以制作任意宽度的图像?
您已经通过决定使用 (2) 中的方法显示数据框解决了 (1)。在我看来,使用 print
显示数据框不是很有用。
(2):display(df)
自动使用空格来包装单元格内容。我没有找到禁用此行为的 pandas 选项。幸运的是,其他人已经遇到了同样的问题,另一个人提供了
您必须更改数据框的样式属性。为此,您使用 Styler
,它包含样式化的数据框。我做了一个简短的示例,您可以从中复制以下行:
import pandas as pd
# Construct data frame content
long_text = 'abcabcabc ' * 10
long_row = [long_text for _ in range(45)]
long_table = [long_row for _ in range(15)]
# Create dataframe
df = pd.DataFrame(long_table)
# Select data you want to output
# df_selected = df.head(5) # First five rows
# df_selected = df.tail(5) # Last five rows
df_selected = df.iloc[[1,3, 7]] # Select row 1,3 and 7
# Create styler of df_selected with changed style of white spaces
dataframe_styler = df_selected.style.applymap(lambda x:'white-space:nowrap')
# Display styler
display(dataframe_styler)
输出:
(3) 正如我在评论中提到的,您只需双击图表,它就会显示一个滑块。