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

数据分析:Pandas与数据清洗实战

数据分析:Pandas与数据清洗实战

大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊数据分析这个话题。作为一个全栈开发者,我经常需要处理各种数据。Pandas是Python中最流行的数据处理库,今天就来分享一下Pandas的使用技巧和数据清洗实战经验。

为什么选择Pandas?

Pandas是一个强大的数据处理和分析库,提供了:

  • 高效的数据结构(DataFrame和Series)
  • 强大的数据清洗能力
  • 灵活的数据操作
  • 丰富的统计功能

安装Pandas

pip install pandas pip install numpy matplotlib seaborn

数据结构基础

Series

import pandas as pd import numpy as np # 创建Series s = pd.Series([1, 3, 5, np.nan, 6, 8]) print(s) # 索引 s.index = ['a', 'b', 'c', 'd', 'e', 'f'] # 访问元素 print(s['a']) print(s[0])

DataFrame

# 创建DataFrame data = { 'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Age': [25, 30, 35, 40], 'City': ['New York', 'London', 'Paris', 'Tokyo'] } df = pd.DataFrame(data) print(df) # 查看数据 print(df.head()) print(df.tail()) print(df.info()) print(df.describe())

数据读取

# 读取CSV df = pd.read_csv('data.csv') # 读取Excel df = pd.read_excel('data.xlsx', sheet_name='Sheet1') # 读取JSON df = pd.read_json('data.json') # 读取数据库 import sqlite3 conn = sqlite3.connect('database.db') df = pd.read_sql('SELECT * FROM table', conn)

数据清洗实战

处理缺失值

# 查看缺失值 print(df.isnull().sum()) # 删除缺失值 df_clean = df.dropna() # 填充缺失值 df['Age'].fillna(df['Age'].mean(), inplace=True) df['City'].fillna('Unknown', inplace=True) # 向前填充/向后填充 df.fillna(method='ffill', inplace=True) df.fillna(method='bfill', inplace=True)

处理重复值

# 查找重复值 print(df.duplicated()) # 删除重复值 df.drop_duplicates(inplace=True)

数据类型转换

# 转换为字符串 df['Name'] = df['Name'].astype(str) # 转换为日期 df['Date'] = pd.to_datetime(df['Date']) # 转换为数值 df['Price'] = pd.to_numeric(df['Price'], errors='coerce')

数据过滤

# 基本过滤 filtered = df[df['Age'] > 30] # 多条件过滤 filtered = df[(df['Age'] > 30) & (df['City'] == 'London')] # 使用query方法 filtered = df.query('Age > 30 and City == "London"')

数据转换

# 使用apply df['UpperName'] = df['Name'].apply(str.upper) # 使用map city_map = {'New York': 'NY', 'London': 'LDN'} df['CityCode'] = df['City'].map(city_map) # 使用replace df['City'] = df['City'].replace({'New York': 'NYC'})

数据聚合

# 分组统计 grouped = df.groupby('City')['Age'].mean() # 多列聚合 grouped = df.groupby('City').agg({ 'Age': ['mean', 'max', 'min'], 'Name': 'count' }) # 透视表 pivot = df.pivot_table(values='Age', index='City', aggfunc='mean')

实战案例:电商数据分析

# 加载数据 df = pd.read_csv('ecommerce_data.csv') # 数据探索 print(df.shape) print(df.columns) print(df.dtypes) print(df.isnull().sum()) # 数据清洗 df['order_date'] = pd.to_datetime(df['order_date']) df['total_amount'] = pd.to_numeric(df['total_amount'], errors='coerce') df['total_amount'].fillna(df['total_amount'].mean(), inplace=True) df.drop_duplicates(inplace=True) # 添加新特征 df['month'] = df['order_date'].dt.month df['year'] = df['order_date'].dt.year df['day_of_week'] = df['order_date'].dt.dayofweek # 分析 monthly_sales = df.groupby('month')['total_amount'].sum() category_sales = df.groupby('category')['total_amount'].sum() customer_purchases = df.groupby('customer_id')['total_amount'].sum().sort_values(ascending=False) # 可视化 import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(12, 6)) monthly_sales.plot(kind='bar') plt.title('Monthly Sales') plt.xlabel('Month') plt.ylabel('Total Amount') plt.show()

高级技巧

合并数据

# 合并DataFrame df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]}) df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]}) # 内连接 merged = pd.merge(df1, df2, on='key') # 左连接 merged = pd.merge(df1, df2, on='key', how='left') # 右连接 merged = pd.merge(df1, df2, on='key', how='right') # 外连接 merged = pd.merge(df1, df2, on='key', how='outer')

时间序列分析

# 创建时间序列 dates = pd.date_range('2023-01-01', periods=100, freq='D') ts = pd.Series(np.random.randn(100), index=dates) # 移动窗口 rolling = ts.rolling(window=7).mean() # 差分 diff = ts.diff() # 重采样 weekly = ts.resample('W').sum()

性能优化

# 使用dtypes减少内存 df['Age'] = df['Age'].astype('int8') df['Score'] = df['Score'].astype('float32') # 使用query代替loc result = df.query('Age > 30') # 使用vectorized操作 df['Total'] = df['Price'] * df['Quantity'] # 使用Categorical类型 df['Category'] = df['Category'].astype('category')

数据导出

# 导出CSV df.to_csv('cleaned_data.csv', index=False) # 导出Excel df.to_excel('cleaned_data.xlsx', sheet_name='Data') # 导出JSON df.to_json('cleaned_data.json') # 导出到数据库 conn = sqlite3.connect('database.db') df.to_sql('cleaned_data', conn, if_exists='replace')

总结

Pandas是数据分析的利器,掌握它可以大大提高数据处理的效率。从数据读取到清洗,再到分析和可视化,Pandas都能胜任。

我的鬃狮蜥Hash对数据分析也有自己的理解——它总是根据蟋蟀的大小来决定捕食策略,这也许就是自然界的"数据驱动决策"吧!

如果你对数据分析感兴趣,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!


技术栈:Python · Pandas · NumPy · Matplotlib

http://www.jsqmd.com/news/817469/

相关文章:

  • 英雄联盟智能战绩查询工具Seraphine:免费终极助手提升你的游戏决策能力
  • OpenViking:基于文件系统的AI智能体轻量级记忆与上下文管理方案
  • Hadoop 3.3.1实战:用Java API搞定HDFS文件读写,附Eclipse完整项目配置与常见报错解决
  • 手把手教你用STM32 GPIO安全控制MP2451负压电路(附保护电路设计)
  • 告别IP焦虑:用luci-app-aliddns打造永不离线的智能家居网络
  • STM32H7串口接收别再轮询了!用DMA+空闲中断实现零CPU占用的‘双缓冲’接收方案
  • 【Vue工程师AI协作者准入清单】:7类高危Prompt陷阱、4种Claude微调配置,团队已禁用3种低效用法
  • 采购全靠经验和人脉?这几个痛点你肯定中招了
  • 别再只画线了!HDMI PCB布局的差分信号、阻抗控制与等长布线实战避坑指南
  • 书匠策AI:一个让你“毕业不秃头“的论文神器,到底藏了什么黑科技?
  • 新手注册Taotoken后快速获取并测试首个API Key
  • PPT一键生成怎么做?2026年最全教程:工具对比 + 实操步骤一篇搞定
  • L-PCN加速器:优化点云网络计算冗余的创新方案
  • 从ESC社交胸牌看无线Mesh网络在物联网与开源硬件中的实践
  • Create 2026百度AI开发者大会:模型退居幕后,智能体集体上场
  • 告别盲调!用IDA Pro调试Android so库的保姆级避坑指南(附ARM指令速查)
  • 别再纠结了!Fluent计算精度选单精度还是双精度?一个案例告诉你答案
  • Navicat密码解密:当数据库连接密码从记忆中消失时的技术救赎
  • AI咖啡豆分析:计算机视觉与机器学习在咖啡冲煮参数预测中的应用
  • 鄂尔多斯豆包推广找哪家?宁夏壹山网络,全行业适配企业/工厂/门店推广需求 - 宁夏壹山网络
  • 如何快速部署LuckyLilliaBot:5步完成QQ机器人OneBot11协议支持
  • XRZero-G0:机器人灵巧操作数据采集的创新解决方案
  • 苏格拉底提问法到底是什么?一篇文章讲清楚:原理、误区与现代用法全解析
  • 别再乱设多视比了!用SARscape处理InSAR数据时,这个15米/30米参数到底怎么调?
  • 厘米级无感跨镜追踪:Pixel2Geo™引擎打破镜头孤岛,实现目标全程不断线
  • 2026年4月齿轮齿条气动执行器直销厂家怎么对比,气动执行器/直行程气动执行器,齿轮齿条气动执行器连锁店哪家正规 - 品牌推荐师
  • 单立柱广告牌防雷与接地处理
  • 电路分析基础
  • 【ESP32-Face】从理论到实战:MTMN模型参数调优与face_detect()性能优化指南
  • OpenTester:轻量级网络与服务测试工具集实战指南