news 2026/4/17 12:13:03

pandas基础操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
pandas基础操作

文章目录

    • 1. Series 与 DataFrame
    • 2. 数据查看与基本信息获取
    • 3. 数据选择与筛选
    • 4. 数据清洗与预处理
    • 5. 数据排序与重置索引
    • 6. 数据分组与聚合分析
    • 7. 数据合并

1. Series 与 DataFrame

Series:一维带标签数组,类似于 Excel 中的单列数据

importpandasaspdimportnumpyasnp# 创建 Series 的几种方式s1=pd.Series([10,20,30,40])# 默认整数索引s2=pd.Series([100,200,300],index=['a','b','c'])# 自定义标签索引s3=pd.Series({'北京':2154,'上海':2428,'广州':1867})# 从字典创建

DataFrame:二维表格型数据结构,是数据分析的主要载体

# 创建 DataFramedf=pd.DataFrame({'姓名':['张三','李四','王五','赵六'],'年龄':[25,30,35,28],'城市':['北京','上海','广州','深圳'],'工资':[8000,12000,15000,10000]})# 从文件读取数据(最常用)df_csv=pd.read_csv('data.csv')# 读取 CSV 文件df_excel=pd.read_excel('data.xlsx')# 读取 Excel 文件df_json=pd.read_json('data.json')# 读取 JSON 文件

2. 数据查看与基本信息获取

Pandas 提供了多种快速查看数据的方法。

# 查看数据前几行和后几行df.head(3)# 查看前3行,默认5行df.tail(2)# 查看后2行,默认5行df.sample(3)# 随机查看3行,了解数据分布# 获取数据基本信息print(f"数据形状:{df.shape}")# 输出 (行数, 列数)print(f"数据维度:{df.ndim}")# 维度数(DataFrame为2)# 查看数据类型和内存信息df.info()# 显示各列数据类型、非空值数量和内存使用df.dtypes# 只查看各列数据类型df.memory_usage()# 查看各列内存使用情况# 数值型数据的统计摘要df.describe()# 显示计数、均值、标准差、最小值、四分位数、最大值df.describe(include='all')# 包含所有类型列的统计

3. 数据选择与筛选

选择列数据

# 选择单列 - 返回 Series年龄列=df['年龄']# 选择多列 - 返回 DataFrame姓名年龄=df[['姓名','年龄']]# 使用点表示法(列名需符合变量命名规则)df.年龄# 等价于 df['年龄']

选择行数据

# 按标签选择(loc) - 使用索引标签df.loc[0]# 选择索引为0的行df.loc[0:2]# 选择索引0到2的行(包含2)df.loc[[0,2,3]]# 选择索引为0,2,3的行# 按位置选择(iloc) - 使用整数位置df.iloc[0]# 选择第0行(从0开始计数)df.iloc[0:3]# 选择第0到2行(不包含3)df.iloc[[0,2]]# 选择第0和第2行# 布尔索引(条件筛选)df[df['年龄']>30]# 年龄大于30的行df[(df['年龄']>25)&(df['工资']<12000)]# 多条件筛选df[df['城市'].isin(['北京','上海'])]# 城市在北京或上海df[~df['城市'].isin(['广州'])]# 城市不是广州(~表示取反)

4. 数据清洗与预处理

数据清洗用来在数据分析中确保数据质量。

处理缺失值

# 检测缺失值df.isnull()# 返回布尔DataFrame,显示每个单元格是否为空df.isnull().sum()# 统计每列缺失值数量df.isnull().any()# 检查每列是否有缺失值# 处理缺失值df.dropna()# 删除包含任何缺失值的行df.dropna(axis=1)# 删除包含任何缺失值的列df.dropna(subset=['年龄','工资'])# 只删除指定列有缺失值的行df.fillna(0)# 用0填充所有缺失值df.fillna({'年龄':df['年龄'].mean()})# 年龄列用平均值填充df.fillna(method='ffill')# 用前一个有效值填充(前向填充)df.fillna(method='bfill')# 用后一个有效值填充(后向填充)# 插值填充df.interpolate()# 线性插值填充

处理重复数据

# 检测重复行df.duplicated()# 标记重复行(除第一次出现外)df.duplicated().sum()# 统计重复行数量# 删除重复行df.drop_duplicates()# 删除完全重复的行df.drop_duplicates(subset=['姓名'])# 基于姓名列删除重复df.drop_duplicates(subset=['姓名'],keep='last')# 保留最后一次出现

数据类型转换

# 转换数据类型df['年龄']=df['年龄'].astype('int32')# 转换为32位整数df['工资']=df['工资'].astype('float64')# 转换为双精度浮点数df['入职日期']=pd.to_datetime(df['入职日期'])# 转换为日期时间# 重命名列df.rename(columns={'旧列名':'新列名'},inplace=True)# 重命名单个列df.rename(columns={'姓名':'员工姓名','年龄':'员工年龄'},inplace=True)# 重命名多个列df.columns=['列1','列2','列3']# 重命名所有列

5. 数据排序与重置索引

排序和索引操作用来对数据进行组织和整理。

# 按值排序df.sort_values('年龄')# 按年龄升序排序df.sort_values('年龄',ascending=False)# 按年龄降序排序df.sort_values(['城市','年龄'])# 先按城市排序,再按年龄排序df.sort_values(['城市','年龄'],ascending=[True,False])# 城市升序,年龄降序# 按索引排序df.sort_index()# 按索引升序排序df.sort_index(ascending=False)# 按索引降序排序# 重置索引df.reset_index()# 将索引转换为列,新建默认整数索引df.reset_index(drop=True)# 直接重置为整数索引,不保留原索引df.reset_index(drop=True,inplace=True)# 原地修改,不创建新对象

6. 数据分组与聚合分析

分组聚合是数据分析的核心,用于计算分组统计量。

# 基本分组操作按城市分组=df.groupby('城市')# 按城市分组按城市分组.groups# 查看分组结果按城市分组.size()# 查看每组大小# 单列聚合df.groupby('城市')['工资'].mean()# 按城市计算平均工资df.groupby('城市')['工资'].sum()# 按城市计算工资总和df.groupby('城市')['年龄'].max()# 按城市计算最大年龄df.groupby('城市')['年龄'].min()# 按城市计算最小年龄df.groupby('城市')['姓名'].count()# 按城市统计人数# 多列聚合df.groupby('城市').agg({'年龄':['mean','min','max'],'工资':['sum','mean','std']})# 命名聚合结果df.groupby('城市').agg(平均年龄=('年龄','mean'),最高工资=('工资','max'),人数=('姓名','count'))# 多级分组df.groupby(['城市','年龄']).mean()# 按城市和年龄两级分组

7. 数据合并

在实际项目中,数据往往来自多个源,需要合并处理。

纵向合并(添加行)

# 简单合并(要求列相同)df_all=pd.concat([df1,df2,df3])# 默认纵向合并df_all=pd.concat([df1,df2],ignore_index=True)# 忽略原索引,创建新索引# 处理不同列的情况df_all=pd.concat([df1,df2],sort=False)# 保留所有列,缺失值填充NaN

横向合并(添加列)

# 简单横向合并(要求行数相同)df_combined=pd.concat([df1,df2],axis=1)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:34:07

【机器学习】4.XGBoost(Extreme Gradient Boosting)

XGBoost 系统学习指南&#xff1a;原理、方法、语法与案例 XGBoost&#xff08;Extreme Gradient Boosting&#xff09;是基于梯度提升树&#xff08;GBDT&#xff09;的优化升级版&#xff0c;凭借高效性、准确性和鲁棒性成为机器学习竞赛和工业界的主流算法。本文从核心原理、…

作者头像 李华
网站建设 2026/4/18 10:07:10

Qt实现Ubuntu程序自动重启

在Ubuntu系统中使用Qt和C实现根据程序名称重启应用程序的功能&#xff0c;可以通过以下步骤实现&#xff1a;核心思路查找目标进程ID&#xff1a;使用系统命令&#xff08;如pgrep&#xff09;获取指定程序名的进程ID终止旧进程&#xff1a;使用kill命令结束目标进程启动新进程…

作者头像 李华
网站建设 2026/4/18 6:54:32

淘汰赛对阵图生成demo

<template><div class"page"><section class"panel"><h1>淘汰赛对阵图生成器</h1><div class"controls"><label class"field"><span>队伍数量&#xff08;2-64&#xff09;</span…

作者头像 李华
网站建设 2026/4/18 8:50:03

新手入门 Java:第一个程序 HelloWorld 详解

作为一名刚接触 Java 的大学生&#xff0c;相信很多小伙伴和我一样&#xff0c;从HelloWorld开启 Java 编程之旅。这个看似简单的程序&#xff0c;却包含了 Java 的基础语法和运行逻辑&#xff0c;今天就带大家一步步拆解&#xff0c;搞定 Java 第一个程序&#xff01;一、准备…

作者头像 李华
网站建设 2026/4/12 16:14:35

实际项目开发应用--485通信

一、485通信波特率的选择 长距离485Modbus通信时&#xff0c;波特率设置“小点更好” ——核心原则是“优先保证通信稳定性&#xff0c;再兼顾效率”&#xff0c;高波特率会加剧信号衰减、抗干扰能力下降&#xff0c;反而容易出现丢包、误码&#xff1b;低波特率虽通信速度慢&a…

作者头像 李华