Pandas 是 Python 数据分析的核心库,提供了丰富的函数用于数据处理、清洗和分析。下面按类别列出常用函数,并附专业说明。
1️⃣ DataFrame / Series 常用属性与方法
方法 / 属性 | 说明 | 示例 |
---|---|---|
df.head(n) |
查看前 n 行 | df.head(5) |
df.tail(n) |
查看后 n 行 | df.tail(3) |
df.shape |
返回行列数 (rows, columns) | df.shape |
df.info() |
数据概况,列类型、非空数等 | df.info() |
df.describe() |
数值列统计汇总(count, mean, std, min, max, quartile) | df.describe() |
df.columns |
返回列名 | df.columns |
df.index |
返回索引 | df.index |
df.dtypes |
返回列的数据类型 | df.dtypes |
df.isna() / df.isnull() |
判断缺失值 | df.isna() |
df.notna() / df.notnull() |
判断非缺失值 | df.notna() |
df.drop(columns=[]) |
删除列 | df.drop(columns=["列1"]) |
df.dropna() |
删除含缺失值的行 | df.dropna() |
df.fillna(value) |
缺失值填充 | df.fillna(0) |
df.rename(columns={}) |
重命名列 | df.rename(columns={"旧列名":"新列名"}) |
df.sort_values(by="列名", ascending=True) |
按列排序 | df.sort_values("订单总额", ascending=False) |
df.sort_index() |
按索引排序 | df.sort_index() |
df.copy() |
复制 DataFrame | df2 = df.copy() |
2️⃣ 数据选择与索引
方法 | 说明 | 示例 |
---|---|---|
df["列名"] |
取单列,返回 Series | df["账户余额"] |
df[["列1","列2"]] |
取多列,返回 DataFrame | df[["账户余额","信用评分"]] |
df.loc[行标签, 列标签] |
按标签取值,可切片 | df.loc[0,"账户余额"] |
df.iloc[行号, 列号] |
按位置取值 | df.iloc[0,1] |
df.at[行标签, 列标签] |
快速取单值 | df.at[0,"账户余额"] |
df.iat[行号, 列号] |
快速按位置取单值 | df.iat[0,1] |
df.query("条件") |
按表达式筛选 | df.query("年龄>30 & 性别=='女'") |
df[df["列"]>值] |
按布尔条件筛选行 | df[df["账户余额"]>20000] |
3️⃣ 聚合与统计函数
方法 | 说明 | 示例 |
---|---|---|
df.sum() |
求和 | df.sum() |
df.mean() |
平均值 | df.mean() |
df.median() |
中位数 | df.median() |
df.std() |
标准差 | df.std() |
df.var() |
方差 | df.var() |
df.min() / df.max() |
最小/最大值 | df.min() |
df.count() |
非空数量 | df.count() |
df.value_counts() |
对 Series 分组计数 | df["性别"].value_counts() |
df.nunique() |
唯一值数量 | df.nunique() |
df.cumsum() |
累积和 | df["销售额"].cumsum() |
df.cumprod() |
累积乘积 | df["增长率"].cumprod() |
df.agg() / df.aggregate() |
聚合函数,可同时多函数 | df.groupby("客户编号")["订单总额"].agg(["count","sum"]) |
4️⃣ 分组与透视
方法 | 说明 | 示例 |
---|---|---|
df.groupby("列名") |
分组操作 | df.groupby("性别")["账户余额"].mean() |
df.pivot(index, columns, values) |
数据透视表 | df.pivot(index="客户编号", columns="月份", values="订单总额") |
df.pivot_table(index, columns, values, aggfunc) |
支持聚合的透视表 | df.pivot_table(index="产品名称", values="订单总额", aggfunc=["sum","count"]) |
df.melt() |
数据展开为长表 | df.melt(id_vars=["客户编号"], value_vars=["订单总额","订单数量"]) |
5️⃣ 字符串操作 (.str
)
方法 | 说明 | 示例 |
---|---|---|
df["列"].str.lower() / .upper() |
大小写转换 | df["姓名"].str.upper() |
df["列"].str.strip() |
去掉首尾空格 | df["姓名"].str.strip() |
df["列"].str.contains("关键字") |
判断包含 | df["地址"].str.contains("北京") |
df["列"].str.replace("旧","新") |
替换 | df["姓名"].str.replace("张","赵") |
df["列"].str.split("分隔符") |
拆分 | df["姓名"].str.split(" ") |
df["列"].str.len() |
字符串长度 | df["姓名"].str.len() |
6️⃣ 日期与时间 (.dt
) 与重采样 (resample
)
方法 | 说明 | 示例 |
---|---|---|
pd.to_datetime() |
转为时间类型 | df["日期"] = pd.to_datetime(df["日期"]) |
df["列"].dt.year/month/day |
获取年/月/日 | df["日期"].dt.year |
df["列"].dt.weekday |
星期(0=周一) | df["日期"].dt.weekday |
df["列"].dt.hour/minute/second |
小时/分钟/秒 | df["日期"].dt.hour |
df["列"].dt.strftime() |
格式化日期 | df["日期"].dt.strftime("%Y-%m-%d") |
df.resample("M", on="下单日期").count() |
按时间频率重采样(聚合),默认月末对齐 | df_ecom.resample("M", on="下单日期")["订单编号"].count() |
7️⃣ 排序与排名
方法 | 说明 | 示例 |
---|---|---|
df.sort_values(by) |
按列排序 | df.sort_values("账户余额", ascending=False) |
df.sort_index() |
按索引排序 | df.sort_index() |
df.rank() |
排名 | df["账户余额"].rank(ascending=False) |
8️⃣ 合并与连接
方法 | 说明 | 示例 |
---|---|---|
pd.concat([df1, df2], axis=0/1) |
按行/列拼接 | pd.concat([df1, df2], axis=0) |
pd.merge(df1, df2, on="列", how="inner/left/right/outer") |
SQL 风格 join | pd.merge(df1, df2, on="客户编号", how="left") |
df.join(df2, on="列") |
索引 join | df.join(df2.set_index("客户编号"), on="客户编号") |
9️⃣ 交叉表 (crosstab
)
方法 | 说明 | 示例 |
---|---|---|
pd.crosstab(index, columns) |
统计两个分类变量组合频次 | pd.crosstab(df_bank["性别"], df_bank["是否活跃"]) |
pd.crosstab(index, columns, values=..., aggfunc=...) |
对交叉组合进行聚合 | pd.crosstab(df_bank["性别"], df_bank["是否活跃"], values=df_bank["账户余额"], aggfunc="sum") |
normalize |
是否显示比例 | pd.crosstab(df_bank["性别"], df_bank["是否活跃"], normalize="index") |
10️⃣ 其他实用函数
方法 | 说明 | 示例 |
---|---|---|
df.apply(func) |
对行/列应用函数 | df["余额"].apply(lambda x:x*1.1) |
df.applymap(func) |
对整个 DataFrame 每个元素应用函数 | df.applymap(lambda x:x*2) |
df.astype(type) |
转换类型 | df["账户余额"].astype(float) |
df.duplicated() / df.drop_duplicates() |
重复值检测与删除 | df.drop_duplicates(subset=["订单编号"]) |
df.memory_usage() |
内存占用 | df.memory_usage() |
✅ 补充说明:
-
pivot_table
可以理解为 Excel 的透视表,支持多函数聚合、多列、多 index。 -
resample
用于时间序列聚合,默认索引对齐在周期末,可用"MS"
对齐月初。 -
crosstab
是统计两个分类变量组合频次的利器,也可加aggfunc
聚合数值列。