按行打印列名和单元格值

2024-09-28 17:01:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将一个数据框按行拆分为带标题的段落。列名是标题,单元格值是段落

示例df(实际df更长)

data = {'Title': ['Wormwood', 'Transmetropolitan', 'Y - The last man'],
    'Author': ['Ben Templesmith', 'Warren Ellis', 'Brian K. Vaughan'],
    'Abstract' :['Blah blah', 'Yadda yadda', 'Alas, poor Yorick! I knew him....']}
    
df = pd.DataFrame(data, columns = ['Title', 'Author', 'Abstract'])

我期望的输出是


标题: 艾草

作者: 本·坦普斯密斯

摘要: 废话

标题: 跨大都会

作者: 沃伦·埃利斯

摘要: 雅达雅达

标题: 你是最后一个男人

作者: 布莱恩·K·沃恩

摘要: 唉,可怜的约里克!我认识他


我试过的代码

for i,j in zip(range(len(df.columns), range(len(df)):
    print(f'***{df.columns[i]}***\n  {df.iloc[j][j]}')
    i+=1
    j+=1

这种方法可以工作,但它看起来很笨重,不能在更长更复杂的df上工作

在上下文中,如果有意义的话,我基本上是想把这个df变成一本小册子


Tags: columns数据abstract标题示例dfdatalen
1条回答
网友
1楼 · 发布于 2024-09-28 17:01:48

使用^{}进行重塑,然后使用drop=True首先删除索引重复值reset_index,并设置新列名称:

df1 = df.stack().reset_index(level=0, drop=True).rename_axis('a').reset_index(name='b')
print (df1)
          a                                  b
0     Title                           Wormwood
1    Author                    Ben Templesmith
2  Abstract                          Blah blah
3     Title                  Transmetropolitan
4    Author                       Warren Ellis
5  Abstract                        Yadda yadda
6     Title                   Y - The last man
7    Author                   Brian K. Vaughan
8  Abstract  Alas, poor Yorick! I knew him....

然后需要在f-string中打印:

for a, b in df1.to_numpy():
    print (f'{a}: {b}')
    Title: Wormwood
Author: Ben Templesmith
Abstract: Blah blah
Title: Transmetropolitan
Author: Warren Ellis
Abstract: Yadda yadda
Title: Y - The last man
Author: Brian K. Vaughan
Abstract: Alas, poor Yorick! I knew him....

相关问题 更多 >