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

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

我到目前为止所能做的只是插入一个名字(Columns 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") 

我怎样才能做到这一点? 谢谢。

像这样的东西应该工作:

 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) 

把食物写到相应部分增加了一排号码。

您可以通过numpy.tilenumpy.repeat创buildDataFrame ,然后删除重复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) ab 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 

列表理解的另一个解决scheme:

 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) ab 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) 

使用pandaspd.MultiIndex.from_product

 df = pd.DataFrame(index=pd.MultiIndex.from_product([name_list, food_list])) df.to_excel("c:\\name_food.xls", sheet_name="Sheet1") 

现在excel文件包含:

  Jack Ice-cream Jack Mango Jack Apple Jack Cake David Ice-cream David Mango David Apple David Cake Andy Ice-cream Andy Mango Andy Apple Andy Cake 

如果您需要图片中所示的确切格式,您可以重置索引,然后将重复的行转换为空string。

 df = pd.DataFrame(index=pd.MultiIndex.from_product(\ [name_list, food_list])).reset_index() df['level_0'].loc[df['level_0'].duplicated()] = '' df.to_excel("c:\\name_food.xls", sheet_name="Sheet1", index=False, columns=False) 

该excel文件将如下所示:

  Jack Ice-cream Mango Apple Cake David Ice-cream Mango Apple Cake Andy Ice-cream Mango Apple Cake