使用 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.tile
和numpy.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:如何从对称的多索引数据框中提取值