当前位置: 首页 > news >正文

【PythonAI】2.2.3 技能实训:处理缺失值、重复值,进行数据筛选与排序

importpandasaspdimportnumpyasnp# 设置显示选项(统信/麒麟OS终端适配)pd.set_option('display.max_columns',None)pd.set_option('display.width',1000)pd.set_option('display.max_colwidth',50)# 读取CSV文件df=pd.read_csv('dirty_reviews.csv')# 查看基本信息print("数据形状:",df.shape)print("\n前5行数据:")print(df.head())print("\n数据信息:")df.info()print("\n基础统计:")print(df.describe())defdata_quality_report(df):"""生成数据质量报告"""report={'总记录数':len(df),'总列数':len(df.columns),'缺失值统计':df.isnull().sum().to_dict(),'缺失值比例':(df.isnull().sum()/len(df)*100).round(2).to_dict(),'重复行数':df.duplicated().sum(),'数据类型':df.dtypes.to_dict()}print("="*50)print("数据质量评估报告")print("="*50)forkey,valueinreport.items():print(f"\n【{key}】")ifisinstance(value,dict):fork,vinvalue.items():print(f"{k}:{v}")else:print(f"{value}")print("="*50)returnreport# 生成报告quality_report=data_quality_report(df)# 1. 处理重复值print(f"清洗前记录数:{len(df)}")df_clean=df.drop_duplicates().copy()print(f"删除重复后记录数:{len(df_clean)}")# 2. 处理缺失值# 查看缺失情况print("\n缺失值统计:")print(df_clean.isnull().sum())# 策略:comment为空的填充为"用户未填写评价"df_clean['comment']=df_clean['comment'].fillna('用户未填写评价')# 删除rating为空的记录(关键字段不可缺失)df_clean=df_clean.dropna(subset=['rating'])# 3. 统一评分格式(统一转换为5分制)defnormalize_rating(rating):"""将评分统一为5分制"""ifpd.isna(rating):returnnp.nan rating=float(rating)ifrating>5:# 假设10分制returnround(rating/2,1)returnrating df_clean['rating_5']=df_clean['rating'].apply(normalize_rating)# 4. 清洗评论内容(去除HTML标签)importredefclean_html(text):"""去除HTML标签"""ifpd.isna(text):return""# 去除HTML标签clean=re.sub(r'<[^>]+>','',str(text))# 去除特殊字符clean=re.sub(r'[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f-\xff]','',clean)returnclean.strip()df_clean['comment_clean']=df_clean['comment'].apply(clean_html)# 5. 标准化时间格式defparse_date(date_str):"""解析多种日期格式"""ifpd.isna(date_str):returnNonedate_str=str(date_str).strip()# 尝试多种格式formats=['%Y-%m-%d','%Y/%m/%d %H:%M','%Y.%m.%d','%Y-%m-%d %H:%M:%S']forfmtinformats:try:returnpd.to_datetime(date_str,format=fmt)except:continue# 如果都失败,使用pandas自动解析try:returnpd.to_datetime(date_str)except:returnNonedf_clean['submit_time_clean']=df_clean['submit_time'].apply(parse_date)# 6. 数据筛选与排序# 筛选有效评分(1-5分)df_clean=df_clean[(df_clean['rating_5']>=1)&(df_clean['rating_5']<=5)]# 按时间排序df_clean=df_clean.sort_values('submit_time_clean',ascending=False)# 筛选高质量评价(评分>=4且评论长度>10)high_quality=df_clean[(df_clean['rating_5']>=4)&(df_clean['comment_clean'].str.len()>10)]print(f"\n高质量评价数:{len(high_quality)}")

运行结果:

(ai_env)$ python3 quality_report.py 数据形状:(6,6)前5行数据: user_id username rating comment submit_time city 0 1001 用户A 5.0 很好吃的红枣!<p>推荐购买</p> 2024-01-15 乌鲁木齐 1 1002 用户B 8.0 味道不错 2024/01/16 10:30 阿克苏 2 1003 用户C NaN NaN 2024.01.17 喀什 3 1001 用户A 5.0 很好吃的红枣!<p>推荐购买</p> 2024-01-15 乌鲁木齐 4 1004 用户D 9.0 物流很快,包装完好 2024-01-18 14:20 和田 数据信息: <class'pandas.core.frame.DataFrame'> RangeIndex: 6 entries,0 to 5Datacolumns(total 6 columns):# Column Non-Null Count Dtype----------------------------0 user_id 6 non-null int64 1 username 6 non-null object 2 rating 5 non-null float64 3 comment 5 non-null object 4 submit_time 6 non-null object 5 city 6 non-null object dtypes: float64(1),int64(1),object(4)memory usage: 416.0+ bytes 基础统计: user_id rating count 6.000000 5.000000 mean 1002.666667 6.200000 std 1.632993 2.167948 min 1001.000000 4.000000 25% 1001.250000 5.000000 50% 1002.500000 5.000000 75% 1003.750000 8.000000 max 1005.000000 9.000000 ================================================== 数据质量评估报告 ================================================== 【总记录数】 6 【总列数】 6 【缺失值统计】 user_id: 0 username: 0 rating: 1 comment: 1 submit_time: 0 city: 0 【缺失值比例】 user_id: 0.0 username: 0.0 rating: 16.67 comment: 16.67 submit_time: 0.0 city: 0.0 【重复行数】 1 【数据类型】 user_id: int64 username: object rating: float64 comment: object submit_time: object city: object ================================================== 清洗前记录数: 6 删除重复后记录数: 5 缺失值统计: user_id 0 username 0 rating 1 comment 1 submit_time 0 city 0 dtype: int64 高质量评价数: 1(ai_env)$
http://www.jsqmd.com/news/1176825/

相关文章:

  • Rufus终极指南:彻底告别系统安装烦恼的免费USB启动盘制作神器
  • ER-Save-Editor终极指南:3分钟学会艾尔登法环存档编辑的完整方法
  • 如何用KLayout免费开源版图设计工具实现芯片设计全流程:从入门到验证的完整指南
  • 性能调优指南:Gemma-4-31B-it 8位量化版内存优化与推理加速技巧
  • HarmonyKit | 鸿蒙开发:API 废弃与迁移策略——从 pushUrl 到 UIContext
  • 同样花了钱做AI GEO,为什么有人赚了有人赔了?——3对佛山企业对比实录
  • D类音频放大器MA12070与PIC18F86J15的硬件设计与优化
  • AI Agent自动客服上线前必须完成的17项合规性检查(含GDPR/《生成式AI服务管理暂行办法》双标对照表)
  • ibus-libpinyin国际化支持:多语言界面与本地化终极指南
  • Oracle单机修改监听端口注册多个监听端口
  • Metadata Extraction Leveraging Large Language Models
  • DeepSeek注释生成模型私有化部署最后1公里:从Docker镜像瘦身62%到离线推理吞吐达142 QPS(附完整helm chart)
  • 2026 安徽滁州市全区域彩钢瓦修缮公司 TOP4 权威推荐|彩钢瓦翻新 / 防水补漏 / 除锈喷漆优选指南 + 避坑攻略 - 本地便民网
  • Flame引擎斜45度视角开发:从视觉投影到沉浸体验的完整指南
  • RecastNavigation导航网格指南:5步掌握游戏AI路径规划技术
  • 第6章数据库设计基础知识
  • Nokhwa高级应用:从视频流解码到自定义摄像头控制
  • 如何使用KOS实现坎巴拉太空计划全自动发射?5分钟快速入门指南
  • Hermes 教程 02:配置详解
  • 科幻迷必备!ScienceFictionCollection项目特色功能与资源优势解析
  • 医保在职转退休
  • 探索10000+ shadcn/ui主题库:技术架构与开发实践深度解析
  • pandocs技术揭秘:如何利用Game Boy图形系统实现高效渲染
  • 一文读懂:通俗易懂的KMP算法详解
  • 2026年百色右江区黄金回收哪家靠谱?实测3大30年老牌机构,报价稳居榜首 - 福金阁黄金回收
  • 2026年7月最新泉州宝玑官方售后联系电话与客户服务中心网点地址 - 亨得利钟表维修中心
  • Rust在Cursor中调试崩溃的3大致命陷阱:从内存泄漏到宏展开失败,附可立即复用的配置模板
  • MediaCrawler终极指南:5分钟掌握多平台数据采集技术
  • 【Atlas】治理工作流(如标签审批)是否原生支持?
  • 天津河西实力私教哪里找?这3家口碑爆棚! - GrowthUME