使用 Python/Pandas 将多索引数据写入 excel 文件

Posted

技术标签:

【中文标题】使用 Python/Pandas 将多索引数据写入 excel 文件【英文标题】:Writing multi-indexed data to an excel file with Python/Pandas 【发布时间】:2018-02-26 14:05:39 【问题描述】:

我想创建一个 Excel 电子表格并为每个变量插入相等数量的行。理想的结果应该看起来像图片中的 A 列和 B 列。

到目前为止,我只能插入 1 个名称(列 D 和 E),不知道对其余部分进行正确的枚举。

这就是我所拥有的:

import xlwt, xlrd
import os

current_file = xlwt.Workbook()
write_table = current_file.add_sheet('Sheet1')

name_list = ["Jack", "David", "Andy"]
food_list = ["Ice-cream", "Mango", "Apple", "Cake"]

total_rows = len(name_list) * len(food_list)   # how to use it?

write_table.write(0, 0, "Jack")

for row, food in enumerate(food_list):
    write_table.write(row, 1, food)

current_file.save("c:\\name_food.xls")

我怎样才能为所有人做到这一点?谢谢。

【问题讨论】:

为什么这个标签是熊猫?你甚至没有导入它。 @COLDSPEED,我想 Pandas 可以在这里施展魔法。 :) 除非您拥有 pandas 并且正在认真考虑使用某人提供的解决方案,否则请求 pandas 解决方案是没有意义的。如果你是,那很好。 【参考方案1】:

您可以通过numpy.tilenumpy.repeat 创建DataFrame,然后删除a 列中的重复项:

df = pd.DataFrame('a': np.repeat(name_list, len(food_list)),
                   'b': np.tile(food_list, len(name_list)))

df['a'] = np.where(df['a'].duplicated(), '', df['a'])
print (df)
        a          b
0    Jack  Ice-cream
1              Mango
2              Apple
3               Cake
4   David  Ice-cream
5              Mango
6              Apple
7               Cake
8    Andy  Ice-cream
9              Mango
10             Apple
11              Cake

列表理解的另一种解决方案:

df = pd.DataFrame('a': [y for x in name_list for y in [x] + [''] * (len(food_list)-1)],
                   'b': food_list * len(name_list))
print (df)
        a          b
0    Jack  Ice-cream
1              Mango
2              Apple
3               Cake
4   David  Ice-cream
5              Mango
6              Apple
7               Cake
8    Andy  Ice-cream
9              Mango
10             Apple
11              Cake

最后写to_excel

df.to_excel('c:\\name_food.xls', index=False, header=False)

【讨论】:

谢谢!这绝对是学习的超级奖励。你介意我选择使用 xlrd the Answer 的解决方案吗? 这取决于你。 ;) 如果他的回答被接受,每个回答者都会很高兴 ;)【参考方案2】:

这样的事情应该可以工作:

import xlwt, xlrd
import os

current_file = xlwt.Workbook()
write_table = current_file.add_sheet('Sheet1')

name_list = ["Jack", "David", "Andy"]
food_list = ["Ice-cream", "Mango", "Apple", "Cake"]

for i, name in enumerate(name_list):
    write_table.write(i * len(food_list), 0, name_list[i])

    for row, food in enumerate(food_list):
        write_table.write(i * len(food_list) + row, 1, food)

current_file.save("c:\\name_food.xls")

重要的是

write_table.write(i * len(food_list), 0, name_list[i])

你说名字应该写在第 0、4、8、12 行...

还有一部分

write_table.write(i * len(food_list) + row, 1, food)

将食物写入按行号增加的相应部分。

【讨论】:

太棒了!这是惊人的想法。感谢您的帮助。顺便说一句,如果你介意我选择 COOLSPEED 的答案? 慷慨!这是你的。

以上是关于使用 Python/Pandas 将多索引数据写入 excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

Python,pandas:如何从对称的多索引数据框中提取值

Python Pandas:如何添加另一个名称的多索引?

Python Pandas - 发布 concat 多索引数据帧

Python Pandas 按多索引和列排序

Python Pandas 多索引名称警告

python pandas:重命名多索引数据框中的单列标签