Python自动化办公应用学习笔记62—Pandas库操作Excel文件3
moboyou 2025-09-18 04:11 1 浏览
2.2 写入 Excel 文件
Pandas 提供灵活的 Excel 文件写入功能,通过 df.to_excel() 方法实现。
基本写入操作
将处理后的数据保存回 Excel 文件是常见需求:
# 简单写入
df.to_excel('分析结果.xlsx', index=False)
# 完整参数控制
df.to_excel(
excel_writer='分析报告.xlsx',
sheet_name='数据汇总', # 工作表名称
index=False, # 不写入行索引
header=True, # 写入列名
startrow=1, # 起始行位置(从0开始)
startcol=0, # 起始列位置
float_format="%.2f", # 浮点数格式(保留两位小数)
encoding='utf-8-sig' # 文件编码(支持中文)
)
多工作表输出技巧
# 方法1:使用 ExcelWriter 输出多个工作表
with pd.ExcelWriter('多工作表报告.xlsx', engine='openpyxl') as writer:
df_summary.to_excel(writer, sheet_name='汇总', index=False)
df_details.to_excel(writer, sheet_name='明细数据', index=False)
df_analysis.to_excel(writer, sheet_name='分析结果', index=False)
# 方法2:追加到现有文件
with pd.ExcelWriter('现有文件.xlsx', mode='a', engine='openpyxl') as writer:
df_new_data.to_excel(writer, sheet_name='新增数据', index=False)
格式化输出示例
创建具有专业外观的 Excel 报告:
# 创建带格式的 Excel 文件
with pd.ExcelWriter('格式化报告.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='销售数据', index=False)
# 获取工作簿和工作表对象
workbook = writer.book
worksheet = writer.sheets['销售数据']
# 定义标题行格式
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'valign': 'top',
'fg_color': '#D7E4BC', # 浅绿色背景
'border': 1,
'font_size': 12
})
# 应用标题格式
for col_num, value in enumerate(df.columns.values):
worksheet.write(0, col_num, value, header_format)
# 设置列宽
worksheet.set_column(0, len(df.columns)-1, 15)
第三部分:数据探索与清洗
3.1 数据查看与统计
基础信息查看
读取数据后,首先需要了解数据的基本情况:
# 查看数据前5行
print("前5行数据:")
print(df.head())
# 查看数据后3行
print("\n后3行数据:")
print(df.tail(3))
# 查看数据形状(行数,列数)
print(f"\n数据形状: {df.shape}")
# 查看列名
print(f"\n列名: {df.columns.tolist()}")
# 查看数据类型
print("\n数据类型:")
print(df.dtypes)
统计信息获取
深入理解数据的统计特性:
# 数值型数据的描述性统计
print("数值型数据描述统计:")
print(df.describe())
# 数据概览信息(包括内存使用)
print("\n数据概览信息:")
df.info()
# 查看某一列的值分布
print("\n产品类别分布:")
print(df['产品类别'].value_counts())
# 查看每列唯一值数量
print("\n各列唯一值数量:")
print(df.nunique())
数据采样方法
对于大规模数据集,采样是有效的探索方式:
# 随机采样10%的数据
sample_df = df.sample(frac=0.1)
# 随机采样100条数据
sample_df = df.sample(n=100)
# 设置随机种子确保可重复性
sample_df = df.sample(n=50, random_state=42)
# 分层抽样示例(确保各类别都有代表)
stratified_sample = df.groupby('类别').apply(lambda x: x.sample(n=10))
3.2 数据清洗流程
缺失值处理
缺失值是数据清洗中的常见问题,需要妥善处理:
# 检测缺失值
missing_count = df.isnull().sum()
missing_percent = df.isnull().mean() * 100
print("缺失值统计:")
missing_info = pd.DataFrame({
'缺失数量': missing_count,
'缺失比例(%)': missing_percent.round(2)
})
print(missing_info)
# 删除缺失值策略
df_cleaned = df.dropna() # 删除所有包含缺失值的行
df_cleaned = df.dropna(subset=['重要列1', '重要列2']) # 只删除关键列有缺失值的行
# 填充缺失值方法
df_filled = df.fillna(0) # 用0填充
df_filled = df.fillna(df.mean()) # 用均值填充
df_filled = df.fillna(method='ffill') # 用前一个值填充(向前填充)
df_filled = df.fillna(method='bfill') # 用后一个值填充(向后填充)
# 高级填充技巧:按分组填充
df['价格'] = df.groupby('产品类别')['价格'].transform(
lambda x: x.fillna(x.mean())
)
重复值处理
重复数据会影响分析结果的准确性:
# 检测重复行
duplicate_rows = df.duplicated()
print(f"发现 {duplicate_rows.sum()} 个完全重复的行")
# 基于特定列检测重复
duplicate_subset = df.duplicated(subset=['客户ID', '订单日期'])
print(f"基于关键列发现 {duplicate_subset.sum()} 个重复行")
# 删除重复行
df_unique = df.drop_duplicates() # 删除完全相同的行
df_unique = df.drop_duplicates(subset=['列1', '列2']) # 基于指定列删除重复
# 保留最后出现的重复值
df_unique = df.drop_duplicates(keep='last')
数据类型转换
正确的数据类型可以提高处理效率和准确性:
# 基本类型转换
df['数量'] = df['数量'].astype(int) # 转换为整数
df['描述'] = df['描述'].astype(str) # 转换为字符串
# 日期时间转换
df['日期'] = pd.to_datetime(df['日期'], format='%Y/%m/%d')
# 分类数据优化(节省内存,提高性能)
df['产品类别'] = df['产品类别'].astype('category')
df['地区'] = df['地区'].astype('category')
# 自定义转换函数
def clean_numeric(value):
"""
清理数值数据,移除货币符号和千位分隔符
"""
if pd.isna(value):
return None
try:
# 移除货币符号和逗号,转换为浮点数
cleaned_value = str(value).replace('yen', '').replace(',', '').strip()
return float(cleaned_value) if cleaned_value else None
except ValueError:
return None
df['价格'] = df['价格'].apply(clean_numeric)
列操作管理
高效管理数据表的列结构:
# 列重命名
df = df.rename(columns={
'old_name1': 'new_name1',
'old_name2': 'new_name2'
})
# 删除列
df = df.drop(['无用列1', '无用列2'], axis=1)
# 调整列顺序
new_order = ['ID', '姓名', '部门', '工资', '入职日期']
df = df[new_order]
# 添加新列
df['年薪'] = df['月薪'] * 12
相关推荐
- 一个时间选择器,为何大家都不相同
-
在自媒体平台的定时发布功能中,看似基础的时间选择器,在不同平台却呈现出显著差异——从时间范围限制、日期展示方式,到时间精度与交互布局,各平台设计均有侧重,这些差异背后,实则是对用户场景、操作便捷性...
- 全新生成模型「离散分布网络DDN」如何做到原理简单,性质独特?
-
本文作者杨磊,目前在大模型初创公司阶跃星辰担任后训练算法工程师,其研究领域包括生成模型和语言模型后训练。在这之前,他曾在旷视科技担任了六年的计算机视觉算法工程师,从事三维视觉、数据合成等方向。他于2...
- 大模型“记性差一点”反而更聪明!随机剔除token,让AI不再死记硬背
-
训练大模型时,有时让它“记性差一点”,反而更聪明!大语言模型如果不加约束,很容易把训练数据原封不动地复刻出来。为解决这个问题,来自马里兰大学、图宾根大学和马普所的研究团队提出了一个新方法——金鱼损失(...
- 彩票并非纯靠运气!老彩民绝不会告诉你的,五个选号笨办法!
-
在许多人眼里,购买彩票纯粹是一场与命运的对赌,完全依赖于那缥缈的运气。然而,真正深入其中的老彩民们却深知,虽然最终的开奖号码随机,但在选号的过程中,确实存在一些值得琢磨的“门道”。这些方法看似“笨拙”...
- 老程序员爱用AI写代码:调查显示三成资深工程师一半代码靠AI生成
-
IT之家9月8日消息,一项新调查深入剖析了生成式人工智能(GenAI)对软件开发者日常工作的变革作用。结果显示,不同资历的工程师呈现出明显分化:资深工程师更倾向于大量使用AI生成代码,主动...
- 告别手动!4种批量建Excel,省时还不出错
-
你是不是也遇到过这种情况:月底要做报表,要给每个部门单独建一个Excel;项目汇总,每个客户都得生成一份数据文件。光是新建、命名、保存这一套流程,就得重复几十遍。鼠标点到手酸,眼睛还得紧盯着生怕出错,...
- 财务多个发票凑一个金额,花了1天,同事用Excel2分钟搞定
-
我们现在有很多发票金额,如下是模拟的数据,这里有10张发票然后总金额是固定的,是由以下的发票金额凑起来正好的数值也不确定具体是几张发票凑起来的现在需要快速的将它们找出来,正好凑好总金额遇到这种凑金额的...
- 调和随机数的混沌_随机调配
-
编者按本文来自作家、游戏智慧(Game-Wisdom.com)创始人乔希·拜瑟(JoshBycer)的个人博客,由indienova取得授权并译制发表,原文链接见文末。正文随机数生成(Rando...
- 大模型“记性差一点”反而更聪明,金鱼损失随机剔除token,让AI不再死记硬背
-
训练大模型时,有时让它“记性差一点”,反而更聪明!大语言模型如果不加约束,很容易把训练数据原封不动地复刻出来。为解决这个问题,来自马里兰大学、图宾根大学和马普所的研究团队提出了一个新方法——金鱼损失(...
- 彩票店老板绝不会告诉你的十个选号潜规则!早知道早中奖!
-
每天都有无数彩民走进彩票店,怀揣着梦想购买一两注彩票。你可曾想过,那些看似随机的数字背后,可能隐藏着一些不为人知的"潜规则"?经过多方打探和走访,我们终于整理出彩票店老板绝不会主动告诉...
- Excel数据重塑利器:WRAPROWS和WRAPCOLS函数详解
-
WRAPROWS和WRAPCOLS是ExcelforMicrosoft365中引入的两个新函数,它们能够将单行或单列的数据按照指定的方式重新排列成多行多列的二维数组。WRAPROWS:...
- 生成式AI不是“通用智能”,而是“工具革命”:企业落地的3个关键思考
-
从ChatGPT到Midjourney,生成式AI的“魔法”正在席卷各行各业。但在热潮之下,我们更需要冷静思考:它真的具备“智能”吗?其实,生成式AI不是通用智能的雏形,而是一场信息处理方式的“工具革...
- 建议收藏!BigemapPro 快捷命令+函数公式大全,效率直接拉满
-
在使用BigemapPro处理地理数据时,熟练掌握快捷命令和函数公式能极大提升工作效率,告别重复操作,让你的地图编辑、数据处理更高效。今天,就为大家整理了一份超全的BigemapPro实用技巧,涵盖常...
- Excel制作小型抽奖系统,可以内定结果,拿去用
-
“年会抽奖还能内定?别笑,我亲眼见过。”这句话一出,会议室瞬间安静,老板都忍不住探头。其实内定不是黑幕,而是技术——Excel就能搞定。三分钟搭好,零代码基础也能玩得飞起,关键是还能让全场嗨到尖叫。先...
- 告别加班!27个Excel新函数全面升级你的工作效率,新手必看!
-
今天我要为大家带来27个Excel新函数全面解析,这些都是微软近年来推出的重磅功能,能够让你的工作效率提升十倍不止!一、动态数组革命:彻底改变Excel计算方式FILTER函数-按条件筛选数据=F...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- php小说爬取源码 (23)
- 云电脑app源码 (22)
- html画折线图 (24)
- docker好玩的应用 (28)
- linux有没有pe工具 (34)
- mysql数据库源码 (21)
- php开源万能表单系统源码 (21)
- 可以上传视频的网站源码 (25)
- match函数的功能是 (21)
- 随机函数如何生成小数点数字 (31)