关于如何使用pandas将不同的数据写入到同一个Excel的不同Sheet表中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于如何使用pandas将不同的数据写入到同一个Excel的不同Sheet表中相关的知识,希望对你有一定的参考价值。
笔者在之前使用python将数据写入到Excel表格中,一般都只需要写入一张Sheet表中就可以了
因最近一个小的需求,需要将不同的大列表数据写入到不同的Sheet表中
这样,再使用之前的 pandas.DataFrame(content_list),然后.to_excel("./xxxxx.xlsx") 就不再好用了
于是笔者又去看了一个pandas模块的,发现也还是有办法实现的,那就是使用 pandas.ExcelWriter的机制
这里笔者通过一个简单的代码进行说明,就可以很好的看出效果
import pandas Data_A_Sheet=[["Name","QQ"],["Author","QQ:5201351"]] Data_B_Sheet=[["Name","URL"],["Cnblogs","https://www.cnblogs.com/5201351"]] writer=pandas.ExcelWriter("DataResult.xlsx") Data_A=pandas.DataFrame(Data_A_Sheet[1:],columns=Data_A_Sheet[0]) Data_B=pandas.DataFrame(Data_B_Sheet[1:],columns=Data_B_Sheet[0]) Data_A.to_excel(writer,sheet_name="Data_A",index=False) Data_B.to_excel(writer,sheet_name="Data_B",index=False) writer.close()
这样就会生成 DataResult.xlsx 文件,打开会,会发现有 Data_A 和 Data_B 两个Sheet表了
说明:如果文件已经存在,重复执行代码,会覆盖重写之前的Excel表中的数据的,效果相当于重新创建了一个Excel文件,替换了已存在的.xlsx文件了
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17369455.html
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!
使用 Python/Pandas 将多索引数据写入 excel 文件
【中文标题】使用 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 的答案? 慷慨!这是你的。以上是关于关于如何使用pandas将不同的数据写入到同一个Excel的不同Sheet表中的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python/Pandas 将多索引数据写入 excel 文件
关于在python中使用pandas模块将列表list/元组tuple写入excel中
使用 Pandas .to_sql 将 JSON 列写入 Postgres