关于如何使用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

 

使用 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.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 的答案? 慷慨!这是你的。

以上是关于关于如何使用pandas将不同的数据写入到同一个Excel的不同Sheet表中的主要内容,如果未能解决你的问题,请参考以下文章

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

关于在python中使用pandas模块将列表list/元组tuple写入excel中

使用 Pandas .to_sql 将 JSON 列写入 Postgres

Pandas将数据写入不同的csv文件中。

如何使用 Python Pandas 比较两个不同大小的数据集?

将 pandas 表写入 impala