gpt4 book ai didi

python - 如何使用 python-docx 添加带有索引的数据框

转载 作者:行者123 更新时间:2023-12-04 12:58:14 24 4
gpt4 key购买 nike

我确实意识到这里已经解决了这个问题(例如, Writing a Python Pandas DataFrame to Word documentpython-docx: Parse a table to Panda Dataframe )。尽管如此,我希望这个问题有所不同。
我用过 value_counts()并生成了一个DataFrame,如下所示:

df = sns.load_dataset('tips')

object_cols = list(df.select_dtypes(exclude=['int', 'float', 'int64', 'float64', 'int32', 'float32']).columns)

# Value Count & Percentage for object columns
c = df[object_cols].apply(lambda x: x.value_counts()).T.stack().astype(int)
p = (df[object_cols].apply(lambda x: x.value_counts(normalize=True)).T.stack() * 100).round(2)
cp = pd.concat([c,p], axis=1, keys=['Count', 'Percentage %'])

cp

数据框看起来像:
                 Count  Percentage %
sex Female 87 35.66
Male 157 64.34
smoker No 151 61.89
Yes 93 38.11
day Fri 19 7.79
Sat 87 35.66
Sun 76 31.15
Thur 62 25.41
time Dinner 176 72.13
Lunch 68 27.87

我正在尝试使用 python-docx 将上述 DataFrame 添加为文档中的表格
import docx 
from docx import Document

doc = Document()
doc.add_paragraph("Value Counts: ")

t = doc.add_table(cp.shape[0]+1, cp.shape[1])

# Set table style
t.style = 'Colorful List Accent 1'

# add the header rows.
for j in range(cp.shape[-1]):
t.cell(0,j).text = cp.columns[j]

# add the rest of the data frame
for i in range(cp.shape[0]):
for j in range(cp.shape[-1]):
t.cell(i+1,j).text = str(cp.values[i,j])

filename = "output/ValueCOunts_Report.docx"
# save the docx
doc.save(filename)

我可以将表格添加为
Count   Percentage %
87 35.66
157 64.34
151 61.89
.....
.....
.....
enter image description here
如何将带有索引的完整 DataFrame 作为表格添加到文档中?

最佳答案

这是一个有点hacky的解决方案,因为它将索引带到列并操纵列看起来像索引:
重置索引并使用 series.duplicated np.where用空白填充列的重复值

cp = cp.rename_axis(['Attr','Val']).reset_index()
cp['Attr'] = np.where(cp['Attr'].duplicated(),'',cp['Attr'])
然后执行您的代码会提供以下输出:
enter image description here

关于python - 如何使用 python-docx 添加带有索引的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com