【问题标题】:Writing multi-indexed data to an excel file with Python/Pandas使用 Python/Pandas 将多索引数据写入 excel 文件
【发布时间】: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 解决方案是没有意义的。如果你是,那很好。

标签: python excel pandas multi-index xlwt


【解决方案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 的答案?
  • 慷慨!这是你的。
猜你喜欢
  • 2016-02-16
  • 2021-09-06
  • 1970-01-01
  • 2021-06-06
  • 2020-04-03
  • 1970-01-01
  • 2020-01-13
  • 2019-08-23
  • 2017-03-30
相关资源
最近更新 更多