Python数据分析Pandas全攻略

在Python中,Pandas是一个非常强大的数据处理和分析库,广泛应用于数据科学和数据分析领域,接下来通过本文介绍Python数据分析Pandas全攻略包括安装与导入示例,感兴趣的朋友跟随小编一起看看吧

目录
  • 一、简介
  • 二、安装与导入
    • 1. 安装
    • 2. 导入
  • 三、核心数据结构
    • 1.Series- 一维带标签
    • 2.DataFrame- 二维表格(核心)
  • 四、数据读写
    • 1. 读取数据(支持多种格式)
    • 2. 保存数据
  • 五、数据探索
    • 1. 查看数据
    • 2. 选择数据
  • 六、数据清洗
    • 1. 处理缺失值
    • 2. 去重
    • 3. 类型转换
  • 七、数据分析
    • 1. 过滤数据
    • 2. 分组聚合
    • 3. 排序
  • 八、数据合并
    • 1. 横向合并(类似 SQL JOIN)
    • 2. 纵向合并(类似 SQL UNION)
  • 九、时间序列处理
    • 十、可视化(需安装 matplotlib)
      • 十一、常见错误处理
        • 1.KeyError
        • 2. 内存不足
      • 十二、完整工作流示例
        • 十三、常用函数

          一、简介

          Python 的 pandas 库是数据分析的核心工具,专门处理结构化数据(如表格、时间序列等)。

          二、安装与导入

          1. 安装

          pip install pandas

          2. 导入

          import pandas as pd  # 行业标准缩写

          三、核心数据结构

          1.Series- 一维带标签

          # 创建 Series
          s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
          print(s)
          a    10
          b    20
          c    30
          d    40
          dtype: int64

          2.DataFrame- 二维表格(核心)

          # 创建 DataFrame
          data = {
              'Name': ['Alice', 'Bob', 'Charlie'],
              'Age': [25, 30, 35],
              'City': ['New York', 'Paris', 'London']
          }
          df = pd.DataFrame(data)
          print(df)
                Name  Age      City
          0    Alice   25  New York
          1      Bob   30     Paris
          2  Charlie   35    London

          四、数据读写

          1. 读取数据(支持多种格式)

          # 读取 CSV
          df = pd.read_csv('data.csv', encoding='utf-8')
          # 读取 Excel
          df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
          # 读取 JSON(与之前学习的 json 库结合)
          df = pd.read_json('data.json')

          2. 保存数据

          # 保存为 CSV
          df.to_csv('output.csv', index=False)  # 不保存行索引
          
          # 保存为 Excel
          df.to_excel('output.xlsx', sheet_name='Results')

          五、数据探索

          1. 查看数据

          查看数据
          方法 作用 示例
          df.head(n) 查看前n行 df.head(3)
          df.tail(n) 查看后n行 df.tail(2)
          df.info() 显示数据概览 df.info()
          df.describe() 统计数值列 df.describe()

          2. 选择数据

          # 选择列
          ages = df['Age']          # 返回 Series
          name_city = df[['Name', 'City']]  # 返回 DataFrame
          # 选择行
          row_1 = df.iloc[0]        # 通过位置选择
          row_bob = df.loc[df['Name'] == 'Bob']  # 通过条件选择
          # 切片
          subset = df[1:3]          # 第2-3行(左闭右开)

          六、数据清洗

          1. 处理缺失值

          # 检测缺失值
          print(df.isnull())
          # 删除含缺失值的行
          df_clean = df.dropna()
          # 填充缺失值
          df_filled = df.fillna({'Age': df['Age'].mean()})  # 用平均值填充年龄列

          2. 去重

          df_unique = df.drop_duplicates(subset=['Name'])  # 根据姓名去重

          3. 类型转换

          df['Age'] = df['Age'].astype(float)  # 转换为浮点型

          七、数据分析

          1. 过滤数据

          # 筛选年龄 > 25 的记录
          adults = df[df['Age'] > 25]
          # 复合条件(注意用 & 代替 and)
          young_in_paris = df[(df['Age'] < 30) & (df['City'] == 'Paris')]

          2. 分组聚合

          # 按城市分组,计算平均年龄
          city_stats = df.groupby('City')['Age'].mean()
          print(city_stats)
          City
          London      35.0
          New York    25.0
          Paris       30.0
          Name: Age, dtype: float64

          3. 排序

          df_sorted = df.sort_values(by='Age', ascending=False)  # 按年龄降序

          八、数据合并

          1. 横向合并(类似 SQL JOIN)

          df1 = pd.DataFrame({'ID': [1, 2], 'Name': ['A', 'B']})
          df2 = pd.DataFrame({'ID': [2, 3], 'Age': [25, 30]})
          # 内连接
          merged = pd.merge(df1, df2, on='ID', how='inner')

          2. 纵向合并(类似 SQL UNION)

          combined = pd.concat([df1, df2], axis=0)  # axis=0 表示行方向

          九、时间序列处理

          # 创建时间序列
          date_rng = pd.date_range(start='2023-01-01', end='2023-01-05', freq='D')
          ts = pd.Series([10, 20, 15, 30, 25], index=date_rng)
          # 重采样(按周计算平均值)
          weekly_avg = ts.resample('W').mean()

          十、可视化(需安装 matplotlib)

          import matplotlib.pyplot as plt
          # 绘制年龄分布直方图
          df['Age'].plot(kind='hist', bins=5)
          plt.title('Age Distribution')
          plt.show()

          十一、常见错误处理

          1.KeyError

          # 检查列名是否存在
          if 'Salary' in df.columns:
              print(df['Salary'])

          2. 内存不足

          • 使用 df.info(memory_usage='deep') 查看内存占用

          • 用 df.select_dtypes(include='number') 选择数值列处理

          十二、完整工作流示例

          # 1. 读取数据
          df = pd.read_csv('sales.csv')
          # 2. 数据清洗
          df = df.dropna(subset=['Price'])
          df['Date'] = pd.to_datetime(df['Date'])
          # 3. 分析
          monthly_sales = df.groupby(pd.Grouper(key='Date', freq='M'))['Price'].sum()
          # 4. 可视化
          monthly_sales.plot(kind='bar')
          plt.title('Monthly Sales')
          plt.show()

          十三、常用函数

          1、数据读取与保存

          函数 作用 示例
          pd.read_csv() 读取 CSV 文件 df = pd.read_csv('data.csv')
          pd.read_excel() 读取 Excel 文件 df = pd.read_excel('data.xlsx')
          pd.read_json() 读取 JSON 文件 df = pd.read_json('data.json')
          df.to_csv() 保存为 CSV df.to_csv('output.csv', index=False)
          df.to_excel() 保存为 Excel df.to_excel('output.xlsx')

          2、数据查看与筛选

          函数/方法 作用 示例
          df.head(n) 查看前 n 行 df.head(5)
          df.tail(n) 查看后 n 行 df.tail(3)
          df.info() 显示数据信息(列名、类型、非空值) df.info()
          df.describe() 统计数值列的基本统计量 df.describe()
          df.shape 获取 DataFrame 的维度 print(df.shape) → 输出 (行数, 列数)
          df.columns 获取所有列名 df.columns.tolist()
          df.loc[] 标签索引选择数据 df.loc[2, 'Age'] → 选择第3行的Age列
          df.iloc[] 位置索引选择数据 df.iloc[0:3, 1:4] → 选择前3行,第2-4列
          df.query() 用表达式筛选数据 df.query('Age > 30 & City == "London"')

          3、数据清洗

          函数/方法 作用 示例
          df.dropna() 删除缺失值 df.dropna(subset=['Age'])
          df.fillna() 填充缺失值 df.fillna({'Age': df['Age'].mean()})
          df.drop_duplicates() 删除重复行 df.drop_duplicates(subset=['Name'])
          df.rename() 重命名列 df.rename(columns={'old':'new'})
          df.astype() 转换数据类型 df['Age'] = df['Age'].astype(int)
          df.replace() 替换特定值 df.replace({'Male':'M', 'Female':'F'})

          4、数据分析

          函数/方法 作用 示例
          df.groupby() 分组聚合 df.groupby('City')['Sales'].sum()
          df.pivot_table() 创建数据透视表 pd.pivot_table(df, values='Sales', index='Region', columns='Year')
          df.sort_values() 按值排序 df.sort_values('Age', ascending=False)
          df.value_counts() 统计唯一值频次 df['City'].value_counts()
          df.corr() 计算列之间的相关系数 df.corr()
          df.merge() 合并两个 DataFrame pd.merge(df1, df2, on='ID')
          pd.concat() 拼接 DataFrame pd.concat([df1, df2], axis=0)

          5、数据操作

          函数/方法 作用 示例
          df.apply() 对列/行应用函数 df['Age'].apply(lambda x: x + 1)
          df.map() 对 Series 元素映射转换 df['Gender'].map({'M':1, 'F':0})
          df.assign() 创建新列 df.assign(Income = df['Salary']*12)
          df.drop() 删除列或行 df.drop(columns=['Temp'])
          df.where() 条件筛选(保留满足条件的值) df.where(df['Age'] > 18)
          df.melt() 宽表转长表 df.melt(id_vars=['Name'])

          到此这篇关于Python数据分析Pandas全攻略的文章就介绍到这了,更多相关Python Pandas安装导入内容请搜索骃骐网以前的文章或继续浏览下面的相关文章希望大家以后多多支持骃骐网!

          您可能感兴趣的文章:

          • Python安装Pandas库的两种方法
          • python安装pandas库不成功原因分析及解决办法
          • 解决安装Python的第三方库pandas报错问题
          • Python 之pandas库的安装及库安装方法小结
          • 详解Python学习之安装pandas
          • 详解Python中pandas的安装操作说明(傻瓜版)
          • python pandas库的安装和创建
          • Python爬虫之pandas基本安装与使用方法示例

          相关推荐:

          Python后端Flask如何优化SQL查询性能_使用SQLAlchemy分析N+1问题

          SQLAlchemy中N+1查询源于relationship默认lazy='select',实操应优先用joinedload或selectinload优化,并通过SQL日志、EXPLAIN分析、索引检查及合理session管理来根治。 SQLAlchemy里relationship默认懒加载,一查列表就触发N+1 查10条用户数据,顺带要显示每个用户的最新订单,结果发了11次SQL:1次查用户,再...

          Python Web框架怎么选_Django与Flask在不同场景下的适用分析

          Django适合中型业务系统,因其开箱即用的admin、ORM、auth等组件;Flask适合轻量、嵌入式或高度定制场景,如微服务或IoT网关。 什么时候该用 Django 而不是 Flask 如果你要快速上线一个带用户管理、后台编辑、数据库迁移、API 和权限控制的中型业务系统,Django 是更省力的选择。它自带 admin、ORM、auth、forms、migrations,这些不是“可选插...

          PyTube 400 Bad Request 错误的根源分析与稳定替代方案

          pytube 因 youtube 后端接口变更频繁触发 http 400 错误,根本原因在于其请求结构已过时;升级至最新版可临时缓解,但长期推荐迁移到维护更活跃、兼容性更强的 yt-dlp 或 pytubefix。 pytube 因 youtube 后端接口变更频繁触发 http 400 错误,根本原因在于其请求结构已过时;升级至最新版可临时缓解,但长期推荐迁移到维护更活跃、兼容性更强的 yt-d...

          PyTube 400 Bad Request 错误的根源分析与稳定解决方案

          pytube 因 youtube 后端接口变更频繁触发 http 400 错误,本质是请求结构失效;升级至最新版 pytube 可快速修复,但长期应转向更活跃维护的替代方案(如 pytubefix 或 yt-dlp)并增强错误处理机制。 pytube 因 youtube 后端接口变更频繁触发 http 400 错误,本质是请求结构失效;升级至最新版 pytube 可快速修复,但长期应转向更活跃维护...

          如何在Python中进行地理空间数据的聚类分析_使用PySAL与Geopandas

          PySAL与geopandas组合是地理感知聚类的务实选择,能尊重地球曲率、构建空间权重、识别空间自相关;sklearn直接对经纬度聚类会因纬度差异导致距离失真,结果不可解释。 PySAL 和 geopandas 的组合,是做真正地理感知聚类(而非简单把经纬度当平面坐标扔进 sklearn.DBSCAN)的务实选择。它能尊重地球曲率、处理空间权重、识别空间自相关——这些恰恰是多数教程跳过、但业务中...

          Python 大数据清洗中利用 RabbitMQ 实现多租户多队列的数据流向精细化控制

          RabbitMQ的vhost不宜直接作租户隔离单位,因其不支持运行时动态增删、管理成本高、连接数易指数级上涨;应改用消息头tenant_id或routing key前缀实现逻辑隔离,并结合DLX+TTL实现可控重试。 为什么 RabbitMQ 的 vhost 不能直接当租户隔离单位用 因为 vhost 是权限和资源隔离边界,但不支持运行时动态创建/销毁,且管理成本高——每次新增租户都要调用 PUT...

          怎么在Python TensorFlow里合并多个数据集_通过dataset.concatenate解决

          concatenate会静默丢弃batch维度,导致batch_size变为1;须确保结构完全一致、统一batch后再concatenate,或改用sample_from_datasets实现比例混合。 concatenate 会静默丢弃 batch 维度,必须提前对齐 直接用 dataset.concatenate() 合并两个已 batch() 的数据集,结果往往出人意料:它不会报错,但会把 ...

          如何按字符串首字母对数据进行分组

          本文详解如何正确使用 Python 的 itertools.groupby 按字符串首字母分组,强调必须先排序再分组,并提供简洁、可读、无冗余的实现方案。 本文详解如何正确使用 python 的 `itertools.groupby` 按字符串首字母分组,强调**必须先排序再分组**,并提供简洁、可读、无冗余的实现方案。 itertools.groupby 是一个高效但易被误用的工具:它仅对连续相...

          Python中如何快速进行探索性数据分析_结合Scikit-learn与Pandas

          不能用scikit-learn做基础EDA,因其专为建模设计,缺乏describe()、hist()、corr()等统计与可视化功能,强行使用会污染原始数据、增加冗余步骤且无法交互调试;EDA应仅用pandas+seaborn+matplotlib完成数据概览、分布分析、相关性探索等。 直接用 pandas 做 EDA,scikit-learn 不参与——它不提供统计摘要、分布图或相关性热力图这类...

          Python中如何解决Pandas打印数据被省略的问题_设置set_option显示全行

          必须同时设置行数、列数、列宽三类选项才能显示全,单设一个无效;推荐执行四行set_option将max_rows、max_columns、width、max_colwidth均设为None。 为什么 pd.set_option 设了还不显示全? 因为 Pandas 默认对列数、行数、列宽都做了截断,单设一个选项(比如只设 display.max_columns)没用,必须同时控制三类限制:列数量、...