基于Python第三方模块Pandas以指定数量分割数据写入同一个Excel的不同Sheet表中
记录一下工作中的小技巧:在Python中,使用pandas库来从SQLServer或者Mysql读取数据(或其他数据来源),然后根据需要将数据分割并写入不同的Excel sheet。下面是一个详细的步骤说明,包括如何连接SQLServer或者Mysql数据库、读取数据、分割数据以及将分割后的数据写入不同的Excel sheet。
文章目录
步骤 1: 安装必要的库
可以使用pip来安装这些库:
pip install pandas sqlalchemy openpyxl pymssql pymysql
步骤 2: 连接数据库并读取数据
首先,你需要创建一个到SQLServer或者Mysql的连接,并读取数据。
from sqlalchemy import create_engine
import pandas as pd
# 创建数据库连接字符串
server = '你的服务器地址'
database = '你的数据库名'
username = '你的用户名'
password = '你的密码'
# 连接SQLServer(选一个)
connection_string = f'mssql+pymssql://{username}:{password}@{server}/{database}'
# 连接Mysql(选一个)
connection_string = f'mssql+pymysql://{username}:{password}@{server}/{database}'
engine = create_engine(connection_string)
# 读取数据表
query = "SELECT * FROM 你的数据表"
df = pd.read_sql(query, engine)
说明:其他数据来源,可以自行修改,比如:读取Excel用pd.read_excel()函数。
步骤 3: 分割数据
你可以将数据分割成多个部分,例如每100万条记录一个sheet (注意:这里可以修改数量)。
def split_dataframe(df, chunk_size):
chunks = []
for i in range(0, len(df), chunk_size):
chunk = df.iloc[i:i+chunk_size]
chunks.append(chunk)
return chunks
# 分割数据为每100万条记录一个部分(注意:这里可以修改数量)
chunk_size = 1000000 # 每100万条记录一个sheet
chunks = split_dataframe(df, chunk_size)
步骤 4: 将分割后的数据写入不同Sheet表中
使用pandas的ExcelWriter将每个分割后的DataFrame写入不同的sheet。
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer: # 使用openpyxl引擎以支持写入多个sheet
for i, chunk in enumerate(chunks):
chunk.to_excel(writer, sheet_name=f'Sheet_{i+1}', index=False) # index=False不写入行索引到Excel中
完整代码
from sqlalchemy import create_engine
import pandas as pd
# 创建数据库连接字符串
server = '你的服务器地址'
database = '你的数据库名'
username = '你的用户名'
password = '你的密码'
# 连接SQLServer(选一个)
connection_string = f'mssql+pymssql://{username}:{password}@{server}/{database}'
# 连接Mysql(选一个)
connection_string = f'mssql+pymysql://{username}:{password}@{server}/{database}'
engine = create_engine(connection_string)
# 读取数据表
query = "SELECT * FROM 你的数据表"
df = pd.read_sql(query, engine)
# 读取数据表
query = "SELECT * FROM 你的数据表"
df = pd.read_sql(query, engine)
# 分割数据为每100万条记录一个部分(注意:这里可以修改数量)
chunk_size = 1000000 # 每100万条记录一个sheet
chunks = split_dataframe(df, chunk_size)
# 将分割后的数据写入同一个Excel的不同Sheet表中
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer: # 使用openpyxl引擎以支持写入多个sheet
for i, chunk in enumerate(chunks):
chunk.to_excel(writer, sheet_name=f'Sheet_{i+1}', index=False) # index=False不写入行索引到Excel中
作者:袁袁袁袁满