以下是一些数据:
import numpy as np
import random
import pandas as pd
random.seed(365)
duration = np.random.exponential(scale = 5, size = 100).round(1)
numbers = np.random.normal(loc = 50, scale = 2, size = 100).round(2)
group = np.random.choice(["A", "B", "C", "D"], size = len(duration))
gender = np.random.choice(["Male", "Female"], p = [0.7, 0.3], size = len(duration))
provider = np.random.choice(["2Degrees", "Skinny", "Vodafone", "Spark"], p = [0.25, 0.25, 0.25, 0.25], size = len(duration))
df = pd.DataFrame(
{"Duration":duration,
"Numbers":numbers,
"Group":group,
"Gender":gender,
"Provider":provider}
)
我试图将多个pandas.styler
对象连接到一个图形中。
我把图中的所有“部分”都作为单独的pandas.styler
对象,这些对象是我创建的 Dataframe ,并对它们进行了“样式化”,使它们拥有自己的标题。
下面是我用来生成图中前两个“片段”的代码(我用来生成其他片段的其他代码与此非常相似):
#Gets the number of rows and columns
pd.DataFrame({
"Number of Rows":df.shape[0],
"Number of Columns":df.shape[1]
}, index = [""])
#Gets the info on the data set's categorical columns
data = []
for column in df:
if df[column].dtype == "object":
freq = df[column].value_counts(ascending = False)
data.append({
"Column Name":column,
"Unique Values":len(df[column].unique()),
"Missing Values":df[column].isna().sum(),
"Most Frequently Occurring":freq.index[0],
"Occurrences":freq[0],
"% of Total":freq[0] / freq.sum()*100
})
pd.DataFrame(data).style.format(precision = 1).set_caption("Categorical Columns").set_table_styles([{
"selector": "caption",
"props": [
("font-size", "16px")
]
}])
我试图创建的图形看起来像这样(这是我在Excel电子表格中创建的):
可以看到,pandas.style
对象(除了第一个 Dataframe ,它表示数据集中的行数和列数)堆叠在每个对象的顶部,它们之间有足够的填充
理想情况下,整个图可以导出到Excel电子表格中。
我几乎有我需要的所有代码,它只是得到这最后一部分在一起,我需要帮助。任何想法如何解决这个问题?
1条答案
按热度按时间wnrlj8wa1#
经过一番研究,我发现整个图形的每一个“片段”都必须首先呈现为HTML代码,然后这些“片段”(现在是HTML字符串)需要通过在它们之间放置填充符来连接。
对于那些将来可能希望创建类似数据汇总表的人,我将把我的代码留在这里: