Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中按一列拆分多张工作表excel文件_Python_Pandas_Dataframe - Fatal编程技术网

在Python中按一列拆分多张工作表excel文件

在Python中按一列拆分多张工作表excel文件,python,pandas,dataframe,Python,Pandas,Dataframe,例如excel文件students\u data.xlsx,它有三张表:students\u name、students\u score和students\u age 学生姓名: id class name 0 1 a jack 1 2 a lucy 2 3 b joe 3 4 b even 4 5 b ho id class name 0 1 a jack 1 2 a lu

例如excel文件
students\u data.xlsx
,它有三张表:
students\u name
students\u score
students\u age

学生姓名

   id class  name
0   1     a  jack
1   2     a  lucy
2   3     b   joe
3   4     b  even
4   5     b    ho
   id class  name
0   1     a  jack
1   2     a  lucy
学生_分数

   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
   id class  score
0   1     a     66
1   2     a     77
   id class  age
0   1     a   15
1   2     a   14
学生年龄

   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
   id class  score
0   1     a     66
1   2     a     77
   id class  age
0   1     a   15
1   2     a   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
2   3     b   joe
3   4     b  even
4   5     b    ho
   id class  name
0   1     a  jack
1   2     a  lucy
学生_分数

   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
   id class  score
0   1     a     66
1   2     a     77
   id class  age
0   1     a   15
1   2     a   14
学生年龄

   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
   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文件?谢谢。

首先通过
sheet\u name=None
参数创建所有数据帧的字典

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'}
最后循环设置的每个值,创建新的
文件
,筛选并创建筛选行的所有图纸名称:

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)