不允许你不知道的Python 14个数据处理的高效小技巧,
off999 2025-08-05 20:27 17 浏览 0 评论
以下是 Python 中 数据处理的高效小技巧,涵盖数据清洗、转换、分析和优化,助你提升数据处理效率:
一、数据清洗技巧
1.处理缺失值
import pandas as pd
df = pd.DataFrame({"A": [1, None, 3], "B": ["x", None, "z"]})
# 填充缺失值
df.fillna({"A": df["A"].mean(), "B": "UNKNOWN"}, inplace=True)
# 删除全为NA的列
df.dropna(axis=1, how="all", inplace=True)
2.快速去重
# 基于某列去重
df.drop_duplicates(subset=["column"], keep="last")
# 统计重复行
df[df.duplicated()]
二、数据转换技巧4.应用函数优化
3.列类型转换
# 批量转换类型
df = df.astype({"price": "float32", "quantity": "int8"})
# 智能转换(如字符串转日期)
df["date"] = pd.to_datetime(df["date"], errors="coerce")
4.应用函数优化
# 避免低效的apply
df["new_col"] = df["col"].str.upper() # 向量化字符串操作
# 必须用apply时加速
df["score"] = df["data"].apply(
lambda x: x*2,
engine="numba" # 需安装numba
)
三、数据分析技巧
5.分组聚合优化
# 标准写法
df.groupby("department")["sales"].sum()
# 多维度聚合(更高效)
df.groupby("department").agg(
total_sales=("sales", "sum"),
avg_price=("price", "mean")
)
6.条件筛选技巧
# 替代低效的iterrows
mask = (df["age"] > 30) & (df["city"] == "Beijing")
result = df.loc[mask]
# 查询复杂条件
df.query("age > 30 & city == 'Beijing'")
四、性能优化技巧
7.大数据分块处理
# 分块读取CSV
chunk_size = 10_000
for chunk in pd.read_csv("large.csv", chunksize=chunk_size):
process(chunk)
# 使用Dask处理超大数据
import dask.dataframe as dd
ddf = dd.read_csv("huge/*.csv")
8.内存优化
# 减小数值类型内存
df["id"] = df["id"].astype("int32") # 默认int64
# 分类数据优化
df["category"] = df["category"].astype("category")
五、实用工具函数
9.数据采样
# 随机抽样
sample = df.sample(n=1000, random_state=42)
# 分层抽样
from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.2, stratify=df["label"])
10.数据透视
# 快速透视表
pivot = pd.pivot_table(
df,
values="sales",
index="region",
columns="month",
aggfunc="sum",
fill_value=0
)
六、高效I/O操作
11.文件读写优化
# 读取时指定列(减少内存)
cols = ["name", "price"]
df = pd.read_csv("data.csv", usecols=cols)
# 保存为parquet格式(比CSV快10倍)
df.to_parquet("data.parquet", engine="pyarrow")
12.数据库交互
# 批量插入数据
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:pass@localhost/db")
df.to_sql("table", engine, if_exists="append", index=False, chunksize=1000)
七、可视化辅助
13.快速数据探查
# 生成统计报告
from pandas_profiling import ProfileReport
profile = ProfileReport(df, title="Data Report")
profile.to_file("report.html")
# 缺失值可视化
import missingno as msno
msno.matrix(df)
八、高级技巧
14.并行处理
from multiprocessing import Pool
def process_chunk(chunk):
return chunk * 2
with Pool(4) as p: # 4个进程
results = p.map(process_chunk, [df1, df2, df3])
15.使用eval优化计算
# 比常规运算快3倍
df.eval("profit = revenue - cost", inplace=True)
避坑指南
- 避免链式赋值
# 错误写法
df[df["age"] > 30]["score"] = 100 # 可能不生效
# 正确写法
df.loc[df["age"] > 30, "score"] = 100
- 慎用iterrows()
- 比向量化操作慢 1000倍 以上
- 及时释放内存
del df # 删除大对象
import gc
gc.collect() # 手动触发垃圾回收
性能对比(处理100万行数据)
操作 | 传统方法耗时 | 优化方法耗时 |
缺失值填充 | 1.2s | 0.3s |
分组聚合 | 4.5s | 0.8s |
文件保存(CSV→Parquet) | 12s | 1.1s |
掌握这些技巧后,你的数据处理效率将显著提升!关键原则:
向量化操作 > 循环
内存映射 > 全加载
批处理 > 单条处理
相关推荐
- 第13章 工程化实践_第13章 工程化实践课
-
13.1ESLint+Prettier代码规范统一代码风格配置//.eslintrc.jsmodule.exports={root:true,env:{node...
- 龙建股份:工程项目中标_龙建股份有限公司招聘网
-
404NotFoundnginx/1.6.1【公告简述】2016年9月8日公告,公司于2016年9月6日收到苏丹共和国(简称“北苏丹”)喀土穆州基础设施与运输部公路、桥梁和排水公司出具的中标通知书...
- 福田汽车:获得政府补助_福田 补贴
-
404NotFoundnginx/1.6.1【公告简述】2016年9月1日公告,自2016年8月17日至今,公司共收到产业发展补助、支持资金等与收益相关的政府补助4笔,共计5429.08万元(不含...
- 翰宇药业:获得发明专利_翰宇药业创新产业
-
404NotFoundnginx/1.6.1【公告简述】2016年9月2日公告,申请的一项发明专利获得中华人民共和国国家知识产权局颁发的发明专利证书,公司于2016年9月1日取得了该专利证书,该专...
- 川金诺:取得发明专利证书_川金诺(300505)
-
404NotFoundnginx/1.6.1【公告简述】2016年9月1日公告,近日,公司申请的一项发明专利获得国家知识产权局颁发的发明专利证书:一种提高和稳定湿法磷酸中和脱氟浓度方法。本发明是稀...
- 使用WTM框架创建博客系统后台并在云服务器发布
-
阅读导航关于lqclass.com博客后台前后端部署2.1已部署访问链接2.2nginx部署2.2.1后台后端发布2.2.2后台前端发布2.2.3云服务器部署下次分享1.关于lqcl...
- Nginx的location匹配规则,90%的人都没完全搞懂,一张图让你秒懂
-
为什么你的Nginx配置总是不生效?改了Nginx配置无数次,reload命令执行了几十遍,浏览器访问时却依然返回404?运维工程师小张上周就遇到了这个问题:明明配置了location/static...
- 全网最新的Dify(1.7.2)私有化离线部署教程(ARM架构)
-
Hello,大家好!近期工作中有涉及到Dify私有化离线部署,特别是针对于一些国产设备。因此特别整理了该教程,实测有效!有需要的小伙伴可以参考下!本文主要针对Dify1.7.2最新版本+国产操作系...
- 如何使用 Certbot 为域名配置永久免费的 HTTPS 证书
-
本文手把手教你如何在Linux上使用Certbot配置HTTPS,包括安装Certbot、修改Nginx配置、设置server_name、申请证书及证书续期。文章内容C一.安装...
- docker run 中 --name 参数介绍_docker run -itd --name
-
在Docker中,--name是dockerrun命令的一个重要参数,用于为新创建的容器指定一个唯一的自定义名称。以下是详细介绍和使用场景:一、--name的功能与语法作用:为容器分配一个...
- 403 Forbidden:无权限访问请求的资源如何处理
-
403Forbidden错误表示客户端(如浏览器或应用)已成功连接服务器,但服务器拒绝了该请求。这通常是由于用户或请求没有足够的权限访问目标资源。以下是常见的可能原因和解决方法:1.常见原因1....
- 使用docker compose实现最简单的容器伸缩、健康检查和负载均衡
-
跟K8S的自动伸缩配置类似,仅使用dockercompose也可以实现低配版的autoscale哟!本文非常的接地气,从头一步步开始,连带Dockerfile制作,容器健康检查,Nginx负载均衡...
- Nginx反向代理和正向代理详解(4大核心区别)
-
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构的必备中间件,本篇重点详解Nginx代理@mikechen文章来源:mikechen.cc1.服务对象不同服务对象不同,这...
- docker真的好难用啊,为什么说它移植性好啊?
-
刚刚接触docker,真的好麻烦啊,不明白为什么要选择docker,我都搞了两天还在搭环境,又告诉我Windows版本过低不适配docker,转而在Ubuntu里装docker,然后MySQL、php...
- Nginx动静分离技术详解(原理+配置+案例)
-
关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构的必备技能,下面我详解Nginx动静分离技术@mikechen文章来源:mikechen.ccNginx动静分离动静分离:是...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)