网络科技官网网站建设网站管理权限怎么进去
2026/5/21 6:14:22 网站建设 项目流程
网络科技官网网站建设,网站管理权限怎么进去,wordpress 开发文档,电商网站开发需求文档Day 49#xff1a;【99天精通Python】Pandas 进阶 - 数据清洗与合并 前言 欢迎来到第49天#xff01; 在现实世界中#xff0c;我们拿到的数据从来都不是完美的。它们可能#xff1a; 缺胳膊少腿#xff1a;某些单元格是空的 (NaN)。脏乱差#xff1a;格式不统一#xf…Day 49【99天精通Python】Pandas 进阶 - 数据清洗与合并前言欢迎来到第49天在现实世界中我们拿到的数据从来都不是完美的。它们可能缺胳膊少腿某些单元格是空的 (NaN)。脏乱差格式不统一日期写成文本包含重复行。四分五裂数据分散在多张表里用户信息表、订单表。数据分析师 80% 的时间都在做数据清洗 (Data Cleaning)。只有把数据洗干净了后续的分析和模型才有意义Garbage In, Garbage Out。本节内容处理缺失值 (isnull,dropna,fillna)处理重复值 (duplicated,drop_duplicates)数据类型转换 (astype)多表连接 (merge)数据合并 (concat)实战练习电商订单数据清洗一、缺失值处理 (Missing Data)在 Pandas 中缺失值通常显示为NaN(Not a Number) 或None。importpandasaspdimportnumpyasnp# 创建一个包含缺失值的 DataFramedfpd.DataFrame({Name:[Tom,Jerry,Spike,None],Score:[88,np.nan,75,60],City:[Beijing,Shanghai,np.nan,Beijing]})print(df)1.1 检测缺失值print(df.isnull())# 返回布尔表 (True 表示缺失)print(df.isnull().sum())# 统计每列缺失值的数量 (非常常用)# Name 1# Score 1# City 11.2 删除缺失值 (Drop)# 只要有一列是 NaN整行删除df_cleandf.dropna()# 只有全行都是 NaN 才删除df_clean_alldf.dropna(howall)# 删除 Score 列缺失的行 (subset 指定列)df_score_cleandf.dropna(subset[Score])1.3 填充缺失值 (Fill)删除太可惜了我们通常会用默认值或平均值填充。# 1. 用固定值填充 (所有 NaN 变 0)df_filleddf.fillna(0)# 2. 用字典针对不同列填充values{Name:Unknown,Score:df[Score].mean(),City:Unknown}df_filled_smartdf.fillna(valuevalues)print(df_filled_smart)二、重复值处理data{Name:[Tom,Tom,Jerry],Age:[10,10,8]}dfpd.DataFrame(data)# 1. 检查重复 (返回布尔 Series)print(df.duplicated())# 2. 删除重复 (保留第一条)df_uniquedf.drop_duplicates()print(df_unique)三、数据类型转换经常遇到读进来的数字是字符串类型比如 “100”这会导致无法计算。dfpd.DataFrame({Price:[100,200,300]})# 查看类型print(df.dtypes)# Price object (即字符串)# 转换类型 (astype)df[Price]df[Price].astype(int)print(df.dtypes)# Price int32四、数据合并 (Merge Concat)这是 SQL 用户最熟悉的操作。4.1 Merge (SQL Join)根据某一列键将两张表左右拼接。# 用户表df_userspd.DataFrame({user_id:[1,2,3],name:[Alice,Bob,Charlie]})# 订单表df_orderspd.DataFrame({order_id:[101,102,103],user_id:[1,1,2],# user_id 是外键amount:[50,100,200]})# 内连接 (Inner Join): 只保留两边都有的mergedpd.merge(df_orders,df_users,onuser_id,howinner)print(merged)# order_id user_id amount name# 0 101 1 50 Alice# 1 102 1 100 Alice# 2 103 2 200 Bob# (注意Charlie 没有订单所以不在结果里)# 左连接 (Left Join): 保留左表所有数据merged_leftpd.merge(df_orders,df_users,onuser_id,howleft)4.2 Concat (拼接)简单的上下堆叠增加行。df1pd.DataFrame({A:[1,2]})df2pd.DataFrame({A:[3,4]})# 上下拼接 (axis0)resultpd.concat([df1,df2],ignore_indexTrue)print(result)# A# 0 1# 1 2# 2 3# 3 4五、实战练习电商数据清洗假设我们有一份脏数据raw_data.csvid,product,price,sales 1,Apple,5.0,100 2,Banana,3.5, 3,Apple,5.0,100 4,Orange,,50 5,Grape,10.0,20任务读取数据。去除重复行。填充缺失的sales用 0 填充。删除price缺失的行。计算总销售额。代码实现importpandasaspdfromioimportStringIO# 模拟读取 CSV (为了方便演示直接用字符串)csv_dataid,product,price,sales 1,Apple,5.0,100 2,Banana,3.5, 3,Apple,5.0,100 4,Orange,,50 5,Grape,10.0,20 dfpd.read_csv(StringIO(csv_data))print(--- 原始数据 ---)print(df)# 1. 去重 (排除 id 列只看内容是否重复)# keepfirst: 保留第一个dfdf.drop_duplicates(subset[product,price,sales])# 2. 填充 sales (NaN - 0)df[sales]df[sales].fillna(0)# 3. 删除 price 缺失的行dfdf.dropna(subset[price])# 4. 计算销售额# 确保类型正确 (以防万一)df[price]df[price].astype(float)df[sales]df[sales].astype(int)df[revenue]df[price]*df[sales]print(\n--- 清洗后数据 ---)print(df)print(f\n总销售额:{df[revenue].sum()})六、常见问题Q1fillna(inplaceTrue)是什么意思很多 Pandas 方法如fillna,drop默认不会修改原数据而是返回一个新的 DataFrame。写法1df df.fillna(0)(推荐逻辑清晰)写法2df.fillna(0, inplaceTrue)(直接修改 df不返回)Q2merge时列名不一样怎么办如果是左表的uid和右表的user_id连接pd.merge(df_left,df_right,left_onuid,right_onuser_id)七、小结数据清洗缺失值重复值合并isnull() 检查dropna() 删除fillna() 填充drop_duplicates()merge (横向关联 Key)concat (纵向堆叠)关键要点拿到数据先看df.info()和df.isnull().sum()。缺失值处理三板斧删(dropna)、填(fillna)、插值。多表关联用merge一定要搞清是 Inner 还是 Left Join。八、课后作业用户数据清洗创建一个 DataFrame包含[Name, Age, Email]。把 Age 为空的行填为平均年龄。把 Email 为空的行删除。把 Age 列转换为整数类型。成绩合并有两个 CSVmath.csv(学号, 数学分) 和english.csv(学号, 英语分)。请读取并用merge将它们合并成一张总表 (学号, 数学, 英语)。异常值检测 (挑战)在练习1的基础上假如 Age 中混入了 200 岁的数据请编写代码将其识别为异常值并剔除比如保留 0-100 岁的数据。下节预告Day 50数据可视化 Matplotlib 基础- 数据洗干净了终于可以画图了明天我们系统学习 Matplotlib绘制折线图、散点图和饼图。系列导航上一篇Day 48 - 数据分析Pandas入门下一篇Day 50 - 数据可视化Matplotlib基础待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询