Pandas核心(Series进阶 + DataFrame入门)
第一部分 Series进阶
一、Series的三种创建方式
- 列表创建(默认索引) 不指定索引时,自动生成从0开始的连续整数索引。 例:
pd.Series([4, 7, -5, 3]) - 列表创建 + 自定义索引 + 名称 通过
index参数自定义索引标签,name参数命名Series。 例:pd.Series([4, 7, -5, 3], index=["a","b","c","d"], name="col") - 字典创建
- 字典的键自动成为索引标签,值成为对应数据。
- 创建时传入
index参数:可筛选保留指定索引、重排顺序;未匹配到的索引对应值填充NaN。
二、核心属性:loc vs iloc
这是Pandas最基础的核心考点,面试必问。
| 属性 | 定位方式 | 切片规则 | 示例 |
|---|---|---|---|
.loc[] |
显式标签索引,按索引名称访问 | 闭区间,起止标签均包含 | s.loc["a":"c"] 包含a、b、c三个元素 |
.iloc[] |
隐式位置索引,按0开始的位置序号访问 | 左闭右开,与Python列表规则一致 | s.iloc[0:2] 仅包含第0、1两个元素 |
补充:
.at[]/.iat[]仅用于访问单个元素,性能略高但功能可完全被loc/iloc替代,了解即可,工作优先统一使用loc/iloc。
其他基础属性 :.index(索引对象)、.values(底层ndarray)、.shape(形状)、.dtype(数据类型)、.name(名称)。
三、Series常用方法
1. 数据预览类
.head(n):查看前n行,默认5行.tail(n):查看后n行,默认5行
2. 缺失值类
.isna():判断每个元素是否为缺失值(NaN/None),返回布尔Series- 注意:Pandas中
None会被自动当作NaN处理
3. 统计计算类
所有统计方法默认自动忽略缺失值NaN。
- 基础统计:
.sum()、.mean()、.min()、.max()、.var()、.std()、.median() - ⭐⭐⭐ 高频易错:
count()vslen()len(s):返回Series总长度,包含缺失值s.count():返回非缺失值的个数,排除NaN
.describe():一次性输出计数、均值、标准差、四分位数等常用统计量
4. 数据处理类
.value_counts():统计每个值出现的频次,默认降序排列,默认排除NaN.unique():返回去重后的数组.nunique():返回去重后的元素个数.drop_duplicates():返回去重后的Series.sort_values():按值排序,默认升序;ascending=False设为降序.sort_index():按索引排序.replace(old, new):替换指定值.isin(集合):判断元素是否在指定集合中,返回布尔Series,常用于筛选
5. 进阶统计类
.quantile(q):计算分位数,q=0.5即中位数;插值方法默认线性插值.corr(other):计算皮尔逊相关系数- 取值范围
[-1, 1] - 1:完全正相关;-1:完全负相关;0:无线性相关关系
- 取值范围
.cov(other):计算协方差,正负表示变化方向,大小表示波动幅度
四、布尔索引
用条件表达式得到布尔Series,再用布尔Series过滤原数据,仅保留True对应的元素。
- 单条件:
s[s > s.mean()] - 多条件组合:
&(且)、|(或),每个条件必须加括号 ,否则优先级出错 例:s[(s > 0) & (s < 5)]
五、Series运算核心特性
这是Pandas区别于NumPy的核心本质特性,面试高频。
- Series与标量运算:标量与每个元素逐一运算,同广播逻辑。
- Series与Series运算 :按索引标签对齐运算 ,索引相同的位置对应计算,索引不匹配的位置填充
NaN。
对比NumPy:NumPy数组按位置对齐运算(第1个和第1个算);Pandas按标签对齐运算,不会因数据顺序错乱导致计算错误。
第二部分 DataFrame入门
一、基础概念
DataFrame是Pandas的二维表格数据结构,等效于Excel工作表、数据库数据表。
- 同时拥有行索引(index)和列索引(columns)
- 每一列都是一个Series,共享同一个行索引
- 不同列可以是不同的数据类型(数值、字符串、布尔等)
- 一句话理解:DataFrame = 共享行索引的多个Series组成的字典,列名就是字典的键。
二、DataFrame创建方式
字典创建(最常用)
字典的键成为列名,值为对应列的数据,默认生成0开始的整数行索引。
pd.DataFrame({"id": [101,102,103], "name": ["张三","李四","王五"]})
两个核心参数:
columns:① 调整列的显示顺序;② 筛选只保留指定列index:自定义行索引标签
三、常用属性
| 属性 | 说明 |
|---|---|
.index |
行索引对象 |
.columns |
列名(列索引) |
.values |
底层二维ndarray数组 |
.shape |
形状,返回(行数, 列数) |
.dtypes |
每一列的数据类型 |
.T |
行列转置 |
loc与iloc(二维版) 规则与Series完全一致,扩展为二维格式:loc[行选择, 列选择]
loc:按行/列的标签名称选择iloc:按行/列的位置序号选择
高频易错点汇总
loc切片是闭区间 ,两端都包含;iloc切片是左闭右开,二者规则不同count()统计非缺失值个数,len()统计总长度(含缺失值)- Series运算按索引标签对齐,不是按位置对齐;索引不匹配结果为NaN
- 多条件布尔索引,每个条件必须单独加括号,否则优先级错误
- 字典创建DataFrame,字典的键是列名,不是行名
- 所有统计函数默认自动忽略NaN
✅
- loc与iloc的区别(含切片规则)
- Series索引自动对齐的运算特性
- count()与len()的区别
- 布尔索引筛选写法
- value_counts、isna、sort_values等高频方法
- DataFrame基础概念与字典创建方式
⚠️
- Series三种创建方式、字典创建的index筛选作用
- 基础统计函数、describe、unique、replace
- 相关系数的取值与含义
- DataFrame常用属性(shape、columns、index)
❌
- at/iat单个元素访问
- quantile插值方法细节、mode众数、cov协方差
- hist直方图、sample随机采样
- to_frame、equals等边缘方法
DataFrame进阶操作
一、二维索引体系:loc vs iloc
DataFrame索引格式:[行选择, 列选择],规则与Series完全一致,扩展至二维。
| 索引方式 | 定位依据 | 切片规则 | 示例 |
|---|---|---|---|
.loc[] |
显式标签索引(行/列的名称) | 闭区间,起止标签均包含 | df.loc["aa":"cc", ["name","age"]] |
.iloc[] |
隐式位置索引(从0开始的序号) | 左闭右开,与Python列表规则一致 | df.iloc[0:3, 1:2] |
补充:
.at[]/.iat[]仅用于访问单个元素,性能略高但功能可完全被loc/iloc替代,了解即可。
二、axis核心参数
axis指定操作的方向,是Pandas最核心也最易混淆的参数。
| 取值 | 别名 | 含义 | 运算结果 |
|---|---|---|---|
axis=0 |
axis='index' |
沿行方向 操作,对每一列执行计算 | 运算后行维度被压缩,保留列数 |
axis=1 |
axis='columns' |
沿列方向 操作,对每一行执行计算 | 运算后列维度被压缩,保留行数 |
- 记忆口诀:axis等于几,运算后该维度就消失
- 默认值:绝大多数方法默认
axis=0(按列计算),符合数据分析按字段统计的习惯
三、常用方法分类
1. 数据预览类
| 方法 | 功能 | 重要程度 |
|---|---|---|
.head(n) |
查看前n行,默认5行 | ⭐⭐⭐ |
.tail(n) |
查看后n行,默认5行 | ⭐⭐⭐ |
.info() |
查看数据全貌:行数、列数、每列类型、缺失值数量 | ⭐⭐⭐ 拿到数据第一个调用 |
.describe() |
数值列统计概览:计数、均值、标准差、四分位数 | ⭐⭐⭐ |
2. 统计计算类
默认按列计算(axis=0),所有统计方法默认自动忽略缺失值NaN。
- 基础统计:
sum()、mean()、min()、max()、var()、std()、median() - 计数:
count()统计非缺失值个数 - 频次:
value_counts()统计值出现的频次
3. 排序类
| 方法 | 功能 | 重要程度 |
|---|---|---|
.sort_index() |
按行索引排序 | ⭐⭐ |
.sort_values(by, ascending) |
按指定列排序,支持多列排序;ascending=False设为降序 |
⭐⭐⭐ 高频 |
.nlargest(n, columns) |
返回某列最大的n条数据 | ⭐⭐ |
.nsmallest(n, columns) |
返回某列最小的n条数据 | ⭐⭐ |
4. 数据处理类
| 方法 | 功能 | 重要程度 |
|---|---|---|
.isna() |
判断元素是否为缺失值 | ⭐⭐⭐ |
.isin(集合) |
判断元素是否在指定集合中 | ⭐⭐ |
.duplicated(subset) |
判断是否为重复行 | ⭐⭐ |
.drop_duplicates(subset) |
删除重复行 | ⭐⭐⭐ |
.replace(old, new) |
替换指定值 | ⭐⭐ |
.sample(n) |
随机采样n行 | ⭐ |
5. 累计运算类
默认沿axis=0计算,多用于时间序列场景:
cumsum()累计和、cumprod()累计积、cummax()累计最大值、cummin()累计最小值diff(periods=1):一阶差分,当前元素减前一个元素
四、布尔索引
DataFrame布尔索引默认筛选行,用条件表达式得到布尔Series,过滤保留True对应的行。
- 单条件筛选 例:
df[df["age"] > 25] - 多条件组合
- 且:
&;或:| - 🚩 易错点:每个条件必须加括号 ,否则运算符优先级出错;禁止使用Python原生的
and/or例:df[(df["age"] > 20) & (df["age"] < 40)]
- 且:
五、运算核心特性
- 与标量运算:标量与每个元素逐一运算。
- DataFrame间运算 :行索引与列索引同时自动对齐 ,行和列标签都匹配的位置才执行计算,任何一边不匹配则填充
NaN。
对比NumPy:NumPy按位置对齐运算(第1行对第1行);Pandas按标签对齐运算,数据顺序错乱不影响计算结果,准确性更高。
六、增删改操作
1. 行索引设置与重置
| 方法 | 功能 |
|---|---|
.set_index(列名) |
将指定列转为行索引 |
.reset_index() |
将行索引还原为普通列,重置为默认0开始的整数索引 |
核心参数:inplace
inplace=False(默认):返回新对象,原DataFrame不变inplace=True:直接修改原对象,无返回值- 🚩 易错点:
inplace=True时不要用变量接收结果,否则会得到None
2. 重命名
rename(index=字典, columns=字典):增量修改指定行/列名,推荐使用- 直接赋值
df.index/df.columns:全量覆盖,长度必须匹配
3. 增加列
直接赋值法(最常用):df["新列名"] = 值
- 列名已存在则覆盖,不存在则新增
4. 删除列/行
drop方法(推荐,支持inplace)
- 删除列:必须加
axis=1,例:df.drop("phone", axis=1, inplace=True) - 删除行:默认
axis=0,例:df.drop("aa", inplace=True) - 🚩 高频易错点:删除列忘记加
axis=1,默认按行删除会报错
del关键字
del df["列名"]:原地删除,无返回值,灵活性低于drop。
5. 插入列
df.insert(loc, column, value):在指定位置插入列,直接原地修改,无inplace参数。
loc:插入位置,0表示最左侧
七、数据导入与导出
1. CSV格式
导出 to_csv()
常用参数:
sep:分隔符,默认逗号;sep="\t"即为tsv格式index:是否保存行索引,工作中常用index=False,避免导出多余索引列header:是否保存列名,默认True
导入 read_csv()
常用参数:
sep:指定分隔符index_col:指定某列作为行索引
2. 其他格式
| 格式 | 方法 | 说明 | 重要程度 |
|---|---|---|---|
| pickle | to_pickle / read_pickle |
Python专属二进制格式,保留完整类型,速度极快,适合保存中间结果 | ⭐⭐ |
| Excel | to_excel / read_excel |
需安装openpyxl库 |
⭐⭐ |
| feather | to_feather / read_feather |
高速跨语言格式(Python/R),用于中间数据交换 | ⭐ |
| JSON | to_json / read_json |
接口数据交互 | ⭐ |
| 其他 | hdf/html/clipboard/sql | 了解功能即可,用到再查 | ⭐ 了解 |
高频易错点汇总
loc切片是闭区间 ,iloc是左闭右开,二者规则不同- 删除列必须加
axis=1,默认axis=0是删除行 inplace=True直接修改原对象,无返回值,不要用变量接收- 多条件布尔索引必须用
&/|,每个条件单独加括号,禁止用and/or - DataFrame运算按行+列双标签对齐,不是按位置对齐;不匹配填充NaN
count()统计非缺失值个数,len()统计总行数(含缺失值)
✅
- loc与iloc的二维用法及切片规则区别
- axis参数的含义与运算方向
- 布尔索引筛选行的写法与注意事项
- inplace参数的作用
- drop删除列必须加axis=1
- set_index/reset_index、增列、删列操作
- CSV导入导出的常用参数
- head/info/describe/sort_values/value_counts等高频方法
⚠️
- 排序类方法、去重、缺失值判断
- rename重命名、insert插入列
- DataFrame间运算的索引对齐特性
- pickle、Excel格式读写
❌
- at/iat单个元素访问
- 累计运算类函数
- hdf、html、clipboard等冷门格式
Pandas日期处理+数据分析+数据组合
第一部分 日期数据处理
1. 核心转换:pd.to_datetime()
-
作用 :将字符串、数字等对象转换为Pandas原生
datetime64类型,是所有日期操作的前提。 -
核心参数
参数 说明 考点 errors解析失败处理方式 ⭐⭐⭐ 高频 raise:报错;ignore:返回原值(默认);coerce:强制转NaN(工作推荐)format指定日期格式字符串 精准解析,速度更快 infer_datetime_format自动推断格式 大幅提升大体积数据解析速度 -
冷门参数(了解即可):
dayfirst、yearfirst、utc、origin、cache
2. dt访问器:提取时间分量
只有datetime类型的Series才能调用.dt访问器。
- 高频常用 :
.dt.year(年)、.dt.month(月)、.dt.day(日)、.dt.quarter(季度)、.dt.day_name()(星期几)、.dt.is_month_end(是否月底) - 了解即可:时、分、秒、周数等细粒度分量
3. to_period() 统计周期转换
-
作用:将具体日期点转换为指定粒度的统计周期,用于按周期分组聚合。
-
核心freq参数
取值 周期粒度 "D"天 "W"周 "M"月 "Q"季度 "Y"/"A"年 -
🚩 易错点:Period是周期对象,不是字符串;用于展示、导出时建议先
.astype(str)转字符串。
第二部分 数据分析入门
1. 数据探查标准流程
拿到新数据的标准执行顺序:
df.shape:查看行数、列数,快速了解数据规模df.columns:查看所有列名df.dtypes:查看每列数据类型df.info():查看全貌(行数、列数、类型、非空数、内存占用)df.head():查看前5行样例
类型对应表
| Pandas类型 | Python类型 | 说明 |
|---|---|---|
object |
str |
字符串/混合类型 |
int64 |
int |
整数 |
float64 |
float |
浮点数 |
datetime64 |
datetime |
日期时间 |
2. 数据选取
取列:返回类型区别
| 写法 | 返回类型 | 说明 |
|---|---|---|
df["列名"] |
Series | 单个方括号取一列,返回Series |
df[["列名"]] |
DataFrame | 双层方括号,即使一列也返回DataFrame |
df[["列1","列2"]] |
DataFrame | 取多列必须用双层列表 |
取行列
.loc[]:按标签选取,行切片为闭区间.iloc[]:按位置选取,切片为左闭右开,支持负数索引
3. 分组聚合 groupby
- 标准语法 :
df.groupby(分组字段)[聚合字段].聚合函数() - 执行逻辑:先按分组字段拆分 → 对每组的聚合字段执行计算 → 合并结果
- 结果特点:分组字段默认转为行索引;多字段分组生成复合索引
- 常用聚合函数 :
mean()、sum()、count()、max()、min()、nunique() - 🚩 易错点:
groupby()返回分组对象,必须接聚合函数才有最终结果。
4. 排序与TopN
| 方法 | 功能 | 考点 |
|---|---|---|
sort_values(by, ascending) |
按指定列排序 | 支持多列排序;ascending可传布尔列表分别指定升降序 |
nlargest(n, 列名) |
返回某列最大的n行 | 取TopN,性能优于全量排序 |
nsmallest(n, 列名) |
返回某列最小的n行 |
经典面试技巧:排序+去重取分组Top1 典型场景:找出每年最高温度对应的记录
-
先按分组字段升序、指标字段降序排序
-
按分组字段去重,默认保留第一条,即每组最大值
df.sort_values(["year","temp_max"], ascending=[True,False]).drop_duplicates(subset="year")
5. 统计概览 describe
- 默认只统计数值型列
include="all":统计所有类型的列.T:行列转置,列数多时更易读
第三部分 数据组合函数
1. concat 拼接
-
作用:沿指定轴将多个对象堆叠到一起,按索引对齐,不匹配处填充NaN。
-
核心参数
参数 说明 考点 axis=0(默认)按行拼接,上下堆叠,行数增加 ⭐⭐⭐ axis=1按列拼接,左右堆叠,列数增加 ⭐⭐⭐ ignore_index=True拼接后重置为0开始的整数索引 工作必用,避免索引重复 join="outer"(默认)索引取并集,两边数据都保留 join="inner"索引取交集,只保留共有部分 -
🚩 易错点:第一个参数是列表 ,必须用
[]包裹所有拼接对象。
2. merge 合并
- 作用:通过公共列(关联键)将两个DataFrame横向合并,等效于SQL的JOIN。
- 与concat的本质区别
- concat:按索引对齐堆叠,是"纵向/横向堆起来"
- merge:按列的值匹配合并,是"按业务主键关联拼接"
- 三种连接类型:一对一、多对一、多对多
高频易错点汇总
- 取列时,单
[]返回Series,双[[]]返回DataFrame groupby()返回分组对象,必须接聚合函数loc切片是闭区间,iloc是左闭右开- concat第一个参数是列表,必须用方括号包裹
- to_period返回的是Period对象,不是字符串
errors="coerce"将解析失败的日期转NaN,不是报错- 排序+去重取分组Top1:先按指标降序,再按分组字段去重
✅
- 日期处理:to_datetime作用、dt提取年月季度、to_period的freq参数
- 数据选取:单列/多列的返回类型区别、loc与iloc的规则
- 分组聚合:groupby标准语法、常用聚合函数、结果结构
- 排序去重:nlargest、sort_values、排序+去重取分组Top1的技巧
- concat拼接:axis参数、ignore_index、按索引对齐特性
- 数据探查标准流程
⚠️
- to_datetime的errors参数
- describe的include参数与转置
- concat的join参数
- merge的基本概念、与concat的核心区别
❌
- to_datetime的冷门参数
- 细粒度时间分量(时分秒、周数)
- 内置plot快速绘图
- 一对一/多对多连接的细节