例如一个具有3个工作表的示例excel文件students_data.xlsx
:students_name
,students_score
和students_age
学生姓名:
id class name
0 1 a jack
1 2 a lucy
2 3 b joe
3 4 b even
4 5 b ho
students_score
id class score
0 1 a 66
1 2 a 77
2 3 b 87
3 4 b 60
4 5 b 90
学生年龄
id class age
0 1 a 15
1 2 a 14
2 3 b 13
3 4 b 12
4 5 b 14
我已使用以下方法将每个工作表分为不同的类别:
import pandas as pd
df = pd.read_excel("students_data.xlsx", sheet_name="students_name")
for i, g in df.groupby("class"):
g.to_excel("students_name/{}.xlsx".format(i), index=False, index_label=False)
df = pd.read_excel("students_data.xlsx", sheet_name="students_score")
for i, g in df.groupby("class"):
g.to_excel("students_score/{}.xlsx".format(i), index=False, index_label=False)
df = pd.read_excel("students_data.xlsx", sheet_name="students_age")
for i, g in df.groupby("class"):
g.to_excel("students_age/{}.xlsx".format(i), index=False, index_label=False)
但是我想按class
按每个excel文件的相同模式进行拆分,例如,对于a.xlsx
,它将具有3个与原始文件相同的工作表,但只有class
中的数据等于a
。
最后的a.xlxs
将包含以下工作表:
学生姓名:
id class name
0 1 a jack
1 2 a lucy
students_score
id class score
0 1 a 66
1 2 a 77
学生年龄
id class age
0 1 a 15
1 2 a 14
b.xlsx
看起来像a.xlsx
,但是只有class
等于b
包含的数据。
如何正确分割和保存Excel文件?谢谢。
答案 0 :(得分:3)
首先通过sheet_name=None
参数创建所有DataFrame的字典。
dfs = pd.read_excel('students_data.xlsx', sheet_name=None)
然后通过提取列class
的值来获取所有可能的类,展平并转换为set。
c = set([y for k, v in dfs.items() for y in v['class']])
print (c)
{'a', 'b'}
最后循环set的每个值,创建新的file
,过滤并创建已过滤行的所有工作表名称:
for i in c:
with pd.ExcelWriter("students_score/{}.xlsx".format(i)) as writer:
for k, v in dfs.items():
v[v['class'] == i].to_excel(writer, index=False, index_label=False, sheet_name=k)