数据拆分

数据拆分分简单拆分和根据指定变量的值拆分等不同情况。[大谦Excel,dqexcel点com]

简单拆分-垂直

【问题描述】

将一个DataFrame的数据在垂直方向简单拆分到不同的文件。

【示例4-1】

本例使用的Excel文件的完整路径为“D:/Samples/ch04/01 数据拆分/简单拆分-垂直/学生成绩.xlsx”。该文件打开后如图4-1所示,是一些学生的语文、数学和英语考试成绩。要求将工作表中的数据在垂直方向上,从上到下每次获取5行数据并保存到一个Excel文件。文件保存在原始数据文件的相同路径下。

Document Image

图4-1 学生成绩表

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch04/01 数据拆分/简单拆分-垂直/学生成绩.xlsx。该Excel文件的第一个工作表中A1:D11为给定数据,A-D列分别为“姓名”、“语文”、“数学”和“英语”数据。用pandas导入Excel文件的数据,第1行为索引行,引擎为"openpyxl",每5行数据执行以下操作:将数据保存到路径“D:/Samples/ch04/01 数据拆分/简单拆分-垂直”下的一个新的工作簿文件中,使用相同的索引行。新工作簿的名称类似“学生成绩_1.xlsx”。

2. ChatGPT提示词模板说明

指定第1行为索引行。实际上,默认时也是将第1行作为索引行。指定新文件的保存路径和名称命名方式。

3. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 读取Excel文件
file_path = "D:/Samples/ch04/01 数据拆分/简单拆分-垂直/学生成绩.xlsx"
data = pd.read_excel(file_path, sheet_name=0, engine="openpyxl")
# 每5行数据保存为一个新的工作簿文件
num_rows_per_file = 5
num_files = (len(data) - 1) // num_rows_per_file + 1
for i in range(num_files):
    start_index = i * num_rows_per_file
    end_index = min(start_index + num_rows_per_file, len(data))
    file_name = "学生成绩_{}.xlsx".format(i+1)
    file_path = "D:/Samples/ch04/01 数据拆分/简单拆分-垂直/" + file_name
    df = data.iloc[start_index:end_index]
    df.to_excel(file_path, sheet_name="Sheet1")

4. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,实现文件的垂向拆分。可在原始数据文件的相同路径下找到新建的Excel文件。

简单拆分-水平

【问题描述】

将一个DataFrame的数据在水平方向简单拆分到不同的文件。

【示例4-2】

本例使用与示例4-1相同的数据。要求将工作表中的每列数据拆分到一个新的Excel文件。

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch04/01 数据拆分/简单拆分-水平/学生成绩.xlsx。该Excel文件的第一个工作表中A1:D11为给定数据,A-D列分别为“姓名”、“语文”、“数学”和“英语”数据。用pandas导入Excel文件的数据,第1行为索引行,第1列数据作为索引列,引擎为"openpyxl",每列数据执行以下操作:将数据保存到路径“D:/Samples/ch04/01 数据拆分/简单拆分-水平”下的一个新的Excel文件中。新工作簿的名称类似“学生成绩_语文.xlsx”。

2. ChatGPT提示词模板说明

指定将第1列作为索引列,这样水平方向拆分时每个新文件中都会有这个索引列,它是公用的。指定新建文件的路径和名称命名方式。

3. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 读取Excel文件数据
data = pd.read_excel('D:/Samples/ch04/01 数据拆分/简单拆分-水平/学生成绩.xlsx', engine='openpyxl')
# 将第1列数据设置为行索引
data.set_index('姓名', inplace=True)
# 遍历每一列数据并保存到新文件中
for col in data.columns:
    # 构造新文件名
    filename = '学生成绩_{}.xlsx'.format(col)
    # 保存数据到新文件
data[[col]].to_excel('D:/Samples/ch04/01 数据拆分/简单拆分-水平/' + filename, engine='openpyxl')

4. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,实现文件的水平拆分。可在原始数据文件的相同路径下找到新建的Excel文件。

根据变量的值拆分到不同工作簿

【问题描述】

数据拆分还有一种常见的情况是根据DataFrame中一个列的不同取值对数据进行拆分。

【示例4-3】

本例使用的Excel文件的完整路径为“D:/Samples/ch04/01 数据拆分/根据变量的值拆分到不同工作簿/各科室人员.xlsx”。该文件打开后如图4-2所示,是不同科室员工的个人资料信息。要求将每个科室的人员资料单独拆分到一个Excel文件。

Document Image

图4-2 不同科室员工的资料

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch04/01 数据拆分/根据变量的值拆分到不同工作簿/各科室人员.xlsx。该Excel文件的第一个工作表中A1:G10为给定数据。用pandas导入Excel文件的数据,第1行为索引行,引擎为"openpyxl"。根据“科室”的唯一值将数据拆分到不同的Excel文件,保存路径为“D:/Samples/ch04/01 数据拆分/根据变量的值拆分到不同工作簿”。新文件的名称类似“科室1.xlsx”。

2. ChatGPT提示词模板说明

指明数据拆分方式是根据指定列的不同值进行拆分。指定新文件的保存路径和命名方式。

3. 代码

  • 根据提示词得到类似下面的代码:
code.python
import pandas as pd
# 读取Excel文件
file_path = 'D:/Samples/ch04/01 数据拆分/根据变量的值拆分到不同工作簿/各科室人员.xlsx'
df = pd.read_excel(file_path, engine='openpyxl', sheet_name=0, index_col=0)
# 拆分数据并保存到不同的Excel文件
grouped = df.groupby('科室')
for group_name, group_data in grouped:
    save_path = f'D:/Samples/ch04/01 数据拆分/根据变量的值拆分到不同工作簿/{group_name}.xlsx'
group_data.to_excel(save_path, engine='openpyxl')

4. 使用代码

打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,实现文件的拆分。可在原始数据文件的相同路径下找到新建的Excel文件。

【知识点扩展】

本例用到了DataFrame对象的groupby方法。该方法常用于对数据进行分组统计,在这里根据科室对数据分组汇总,并分别保存到不同的Excel文件。