Pandas学习笔记·精简速查版:用人话总结Series、DataFrame和数据处理核心操作

Pandas 极简入门:像操作 Excel 一样处理数据

一、Pandas 是干什么的?

一句话:Pandas 就是 Python 里的 Excel,专门用来处理表格数据。

它有三个核心"零件":

零件 是什么 比喻
Series 带标签的一列数据 Excel 里单独一列,每行有名字
DataFrame 带标签的二维表格 Excel 里的一张完整工作表
时间序列 以日期时间为索引的 Series 按时间排列的一列数据

二、Series:一列带名字的数据

创建

python 复制代码
import pandas as pd

# 自动编号
s1 = pd.Series([1, 6, 11, 16])

# 用字典创建,字典的键自动变成行标签
s2 = pd.Series({'语文': 90, '数学': 92, 'Python': 98})

常用操作(和 NumPy 一样,都是批量操作):

python 复制代码
s2['语文'] = 94          # 修改某个值
s2[s2 > 90]             # 筛选大于90的科目
s2.mean()               # 平均值
s2.median()             # 中值
s2.nsmallest(2)         # 最小的2个值
abs(s1)                 # 所有元素求绝对值
s1 + 5                  # 所有元素加5

三、时间序列:自动生成日期

python 复制代码
# 从某天开始,每隔7天生成一个日期
pd.date_range(start='20260101', periods=10, freq='7D')

# 常用频率:D=天,W=周,H=小时,M=月末,MS=月初

用日期做索引

python 复制代码
# 创建按小时排列的数据
data = pd.Series(index=pd.date_range(start='20260701', periods=24, freq='H'), data=range(24))

# 每3小时重采样,求平均值
data.resample('3H').mean()

四、DataFrame:一张完整的表格

创建表格(最常用字典方式):

python 复制代码
# 字典的键变成列名,值变成数据
df = pd.DataFrame({
    '语文': [87, 79, 67, 92],
    '数学': [93, 89, 80, 77],
    '英语': [90, 80, 70, 75]
}, index=['张三', '李四', '王五', '赵六'])

读取 Excel

python 复制代码
df = pd.read_excel('文件路径.xlsx')
df = pd.read_excel('文件路径.xlsx', usecols=['姓名', '交易额'])  # 只读指定列
df = pd.read_excel('文件路径.xlsx', skiprows=[1,3,5])         # 跳过某些行

五、数据筛选和查看

三种取数据的方式

方式 怎么用 什么时候用
df[条件] df[df['交易额'] > 2000] 按条件筛选行
df.iloc[行号, 列号] df.iloc[3, 1] 按数字位置取
df.loc[行标签, 列名] df.loc['张三', '交易额'] 按名字取

查看数据概览

python 复制代码
df.head()              # 前5行
df.tail()              # 后5行
df['交易额'].describe()  # 一键看所有统计信息(总数、均值、最大最小等)
df['交易额'].max()      # 最大值
df['交易额'].min()      # 最小值
df['交易额'].idxmax()   # 最大值在哪一行
df.nlargest(5, '交易额')  # 交易额最大的5条
df.nsmallest(3, '交易额') # 交易额最小的3条

六、排序

python 复制代码
# 按一列排序
df.sort_values(by='交易额', ascending=False)  # 降序

# 按多列排序(先按交易额降序,再按工号升序)
df.sort_values(by=['交易额', '工号'], ascending=[False, True])

# 按列名排序
df.sort_index(axis=1)

七、分组聚合(像 Excel 的分类汇总)

三步套路分组 → 取列 → 计算

python 复制代码
# 每个员工卖了多少钱?
df.groupby(by='姓名')['交易额'].sum()

# 每个柜台的交易额平均值?
df.groupby(by='柜台')['交易额'].mean()

# 每个员工在不同时段的交易额?
df.groupby(by=['姓名', '时段'])['交易额'].sum()

# 一键做多种计算
df.groupby(by='姓名').agg(['sum', 'mean', 'min', 'max'])

八、数据清洗

异常值

python 复制代码
# 找出异常值
df[df['交易额'] < 200]   # 低于200的
df[df['交易额'] > 3000]  # 高于3000的

# 替换异常值
df.loc[df['交易额'] < 200, '交易额'] = 200  # 低于200的全部改成200

缺失值

python 复制代码
df.dropna()                         # 直接丢掉有空值的行
df.fillna({'交易额': 1000})           # 用固定值填充
df.fillna(df['交易额'].mean())       # 用平均值填充

重复值

python 复制代码
df.duplicated()           # 查哪些行重复了
df.drop_duplicates()      # 删掉重复行
df.drop_duplicates(subset=['工号', '日期'])  # 指定列去重

九、透视表和交叉表

透视表:把数据按行列重新排列,自动汇总。

python 复制代码
# 每人每天的交易额总额
df.pivot_table(values='交易额', index='姓名', columns='日期', aggfunc='sum', margins=True)

交叉表:专门统计频次的透视表。

python 复制代码
# 每人每天的上班次数
pd.crosstab(df['姓名'], df['日期'], margins=True)

# 每人在各柜台交易总额
pd.crosstab(df['姓名'], df['柜台'], df['交易额'], aggfunc='sum')

pivot_table 和 crosstab 的区别

用哪个 什么时候用
pivot_table 已经有效据,想按不同维度汇总(求和、平均等)
crosstab 想统计出现了多少次(频次),两个都可以用

十、标准差和协方差

标准差:看数据稳不稳定。越小越稳定,越大越像过山车。

python 复制代码
df.std()       # 标准差
df.std()**2    # 方差(标准差的平方)

协方差:看两组数据是同步变化还是反向变化。

python 复制代码
df.cov()       # 协方差矩阵
协方差值 含义 比喻
正数 同步变化 你往前走,我也往前走
负数 反向变化 你往前走,我往后退
接近0 互不影响 各走各的

十一、数据合并

python 复制代码
# 按行堆叠(加长)
pd.concat([表1, 表2, 表3])

# 按列关联(加宽),像 Excel 的 VLOOKUP
pd.merge(员工表, 工资表, on='工号')

十二、两个好用的内置接口

dt 接口:处理日期。

python 复制代码
pd.to_datetime(df['日期']).dt.weekday_name  # 自动转成周几
pd.to_datetime(df['日期']).dt.quarter       # 自动转成第几季度

str 接口:处理字符串。

python 复制代码
df['日期'].str.extract(r'(\d{4}-\d{2})')    # 提取年月
df['日期'].str.endswith('6')                 # 判断是否以6结尾

Pandas 最核心的思维模式

你想做什么 对应的操作
看数据长什么样 head()describe()
找符合条件的数据 df[df['列名'] > 值]
按某列分类汇总 df.groupby('列名')['要算的列'].sum()
把表排个序 df.sort_values(by='列名')
把两张表拼一起 pd.concat()pd.merge()
把汇总结果做成二维表 df.pivot_table()
处理脏数据 dropna()fillna()drop_duplicates()

附:Pandas 核心函数速查表

函数 一句话用途
pd.read_excel() 读取 Excel 文件
df.head() / df.tail() 看前/后几行
df.describe() 一键看所有统计信息
df['列名'].max() / .min() / .mean() / .sum() 最大/最小/平均/求和
df[df['列名'] > 值] 按条件筛选
df.sort_values(by='列名') 按某列排序
df.groupby('列名')['算的列'].sum() 分类汇总求和
df.groupby('列名').agg(['sum','mean']) 同时做多种汇总
df.pivot_table(values, index, columns, aggfunc) 透视表
pd.crosstab(index, columns, values, aggfunc) 交叉表(统计频次)
df.dropna() / df.fillna() 处理缺失值
df.drop_duplicates() 去重
df.resample('7D', on='日期').sum() 重采样(按时间汇总)
df.std() / df.cov() 标准差 / 协方差
pd.concat([表1, 表2]) 按行堆叠
pd.merge(表1, 表2, on='键') 按列关联

注:已经使用DeepSeek进行整理精简核心内容,些许不理解的配合个人笔记进行理解。