使用 Python/Pandas 将多索引数据写入 excel 文件
Writing multi-indexed data to an excel file with Python/Pandas
我想创建一个 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")
我怎样才能为所有人做到这一点?谢谢。
像这样的东西应该可以工作:
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.tile
and 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)
我想创建一个 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")
我怎样才能为所有人做到这一点?谢谢。
像这样的东西应该可以工作:
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.tile
and 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)