Pandas核心:Series与DataFrame

Pandas核心(Series进阶 + DataFrame入门)


第一部分 Series进阶

一、Series的三种创建方式

  1. 列表创建(默认索引) 不指定索引时,自动生成从0开始的连续整数索引。 例:pd.Series([4, 7, -5, 3])
  2. 列表创建 + 自定义索引 + 名称 通过index参数自定义索引标签,name参数命名Series。 例:pd.Series([4, 7, -5, 3], index=["a","b","c","d"], name="col")
  3. 字典创建
    • 字典的键自动成为索引标签,值成为对应数据。
    • 创建时传入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() vs len()
    • 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的核心本质特性,面试高频。

  1. Series与标量运算:标量与每个元素逐一运算,同广播逻辑。
  2. 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:按行/列的位置序号选择

高频易错点汇总

  1. loc切片是闭区间 ,两端都包含;iloc切片是左闭右开,二者规则不同
  2. count()统计非缺失值个数,len()统计总长度(含缺失值)
  3. Series运算按索引标签对齐,不是按位置对齐;索引不匹配结果为NaN
  4. 多条件布尔索引,每个条件必须单独加括号,否则优先级错误
  5. 字典创建DataFrame,字典的键是列名,不是行名
  6. 所有统计函数默认自动忽略NaN

✅

  1. loc与iloc的区别(含切片规则)
  2. Series索引自动对齐的运算特性
  3. count()与len()的区别
  4. 布尔索引筛选写法
  5. value_counts、isna、sort_values等高频方法
  6. DataFrame基础概念与字典创建方式

⚠️

  1. Series三种创建方式、字典创建的index筛选作用
  2. 基础统计函数、describe、unique、replace
  3. 相关系数的取值与含义
  4. DataFrame常用属性(shape、columns、index)

❌

  1. at/iat单个元素访问
  2. quantile插值方法细节、mode众数、cov协方差
  3. hist直方图、sample随机采样
  4. 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对应的行。

  1. 单条件筛选 例:df[df["age"] > 25]
  2. 多条件组合
    • 且:&;或:|
    • 🚩 易错点:每个条件必须加括号 ,否则运算符优先级出错;禁止使用Python原生的and/or 例:df[(df["age"] > 20) & (df["age"] < 40)]

五、运算核心特性

  1. 与标量运算:标量与每个元素逐一运算。
  2. 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 了解功能即可,用到再查 ⭐ 了解

高频易错点汇总

  1. loc切片是闭区间 ,iloc是左闭右开,二者规则不同
  2. 删除列必须加axis=1,默认axis=0是删除行
  3. inplace=True直接修改原对象,无返回值,不要用变量接收
  4. 多条件布尔索引必须用&/|,每个条件单独加括号,禁止用and/or
  5. DataFrame运算按行+列双标签对齐,不是按位置对齐;不匹配填充NaN
  6. count()统计非缺失值个数,len()统计总行数(含缺失值)

✅

  1. loc与iloc的二维用法及切片规则区别
  2. axis参数的含义与运算方向
  3. 布尔索引筛选行的写法与注意事项
  4. inplace参数的作用
  5. drop删除列必须加axis=1
  6. set_index/reset_index、增列、删列操作
  7. CSV导入导出的常用参数
  8. head/info/describe/sort_values/value_counts等高频方法

⚠️

  1. 排序类方法、去重、缺失值判断
  2. rename重命名、insert插入列
  3. DataFrame间运算的索引对齐特性
  4. pickle、Excel格式读写

❌

  1. at/iat单个元素访问
  2. 累计运算类函数
  3. 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. 数据探查标准流程

拿到新数据的标准执行顺序:

  1. df.shape:查看行数、列数,快速了解数据规模
  2. df.columns:查看所有列名
  3. df.dtypes:查看每列数据类型
  4. df.info():查看全貌(行数、列数、类型、非空数、内存占用)
  5. 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 典型场景:找出每年最高温度对应的记录

  1. 先按分组字段升序、指标字段降序排序

  2. 按分组字段去重,默认保留第一条,即每组最大值

    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:按列的值匹配合并,是"按业务主键关联拼接"
  • 三种连接类型:一对一、多对一、多对多

高频易错点汇总

  1. 取列时,单[]返回Series,双[[]]返回DataFrame
  2. groupby()返回分组对象,必须接聚合函数
  3. loc切片是闭区间,iloc是左闭右开
  4. concat第一个参数是列表,必须用方括号包裹
  5. to_period返回的是Period对象,不是字符串
  6. errors="coerce"将解析失败的日期转NaN,不是报错
  7. 排序+去重取分组Top1:先按指标降序,再按分组字段去重

✅

  1. 日期处理:to_datetime作用、dt提取年月季度、to_period的freq参数
  2. 数据选取:单列/多列的返回类型区别、loc与iloc的规则
  3. 分组聚合:groupby标准语法、常用聚合函数、结果结构
  4. 排序去重:nlargest、sort_values、排序+去重取分组Top1的技巧
  5. concat拼接:axis参数、ignore_index、按索引对齐特性
  6. 数据探查标准流程

⚠️

  1. to_datetime的errors参数
  2. describe的include参数与转置
  3. concat的join参数
  4. merge的基本概念、与concat的核心区别

❌

  1. to_datetime的冷门参数
  2. 细粒度时间分量(时分秒、周数)
  3. 内置plot快速绘图
  4. 一对一/多对多连接的细节
相关推荐
毕业设计7036 小时前
(免费领源码)django空气净化器销售系统09218- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
python·scrapy·mysql·pycharm·django·flask·pandas
benchmark_cc12 小时前
A股、港股、美股日K如何拼接?处理不同交易日造成的时间轴错位
大数据·python·pandas·量化交易·股票数据·quantdash
2601_966949651 天前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
benchmark_cc2 天前
本地已有一年历史 K 线,第二天更新别只拉“昨天一天”
python·数据分析·pandas·量化交易·股票数据·quantdash
正在走向自律4 天前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
ctlover4 天前
Pandas进阶
人工智能·机器学习·pandas
程序员清风4 天前
数据类型转换与日期时间处理
数据结构·pandas
for_ever_love__6 天前
Pandas 基础——用 DataFrame 管理训练数据与实验记录
数据分析·pandas·大模型开发·dataframe
benchmark_cc6 天前
A股量化尾盘筛选对数据时效敏感:行情链路变慢时先排查哪里?
python·数据分析·pandas·量化交易·股票数据·quantdash