当前位置: 首页 > news >正文

【Pandas】pandas DataFrame squeeze

Pandas2.2 DataFrame

Reshaping sorting transposing

方法描述
DataFrame.droplevel(level[, axis])用于**从 DataFrame 的索引(行或列)中删除指定层级(level)**的方法
DataFrame.pivot(*, columns[, index, values])用于重塑 DataFrame 的结构的方法
DataFrame.pivot_table([values, index, …])用于**创建透视表(pivot table)**的函数
DataFrame.reorder_levels(order[, axis])用于重新排序多级索引(MultiIndex)的层级顺序的方法
DataFrame.sort_values(by, *[, axis, …])用于按指定列或行的值对 DataFrame 进行排序的方法
DataFrame.sort_index(*[, axis, level, …])用于按索引(行或列)对 DataFrame 进行排序的方法
DataFrame.nlargest(n, columns[, keep])用于选取 DataFrame 中某列或多列的前 n 个最大值对应的行的方法
DataFrame.nsmallest(n, columns[, keep])用于选取 DataFrame 中某列或多列的前 n 个最小值对应的行的方法
DataFrame.swaplevel([i, j, axis])用于交换多级索引(MultiIndex)中两个层级的位置的方法
DataFrame.stack([level, dropna, sort, …])用于将 DataFrame 的列索引“压入”行索引中,从而增加行数并减少列数的方法
DataFrame.unstack([level, fill_value, sort])用于DataFrame 的行索引层级“展开”为列索引层级的方法
DataFrame.swapaxes(axis1, axis2[, copy])用于**交换 DataFrame 的两个轴(axis)**的方法
DataFrame.melt([id_vars, value_vars, …])用于**将 DataFrame 从宽格式转换为长格式(“融化”操作)**的方法
DataFrame.explode(column[, ignore_index])用于将 DataFrame 中某一列的列表元素“展开”为多行的方法
DataFrame.squeeze([axis])用于**将长度为 1 的轴(axis)从 DataFrame 中“挤压”掉,返回更简洁的数据结构(如 Series)**的方法

pandas.DataFrame.squeeze()

pandas.DataFrame.squeeze() 是一个用于**将长度为 1 的轴(axis)从 DataFrame 中“挤压”掉,返回更简洁的数据结构(如 Series)**的方法。

它是 Pandas 中用于数据维度压缩的重要工具之一,尤其适用于当你确定某些维度只有一个元素时,可以将其转换为更易处理的格式。


📌 方法签名
DataFrame.squeeze(axis=None)

🔧 参数说明
参数类型说明
axis{0/'index', 1/'columns', None},默认 None指定要压缩的轴;如果该轴长度为 1,则会被移除;若为 None,则压缩所有长度为 1 的轴

✅ 返回值
  • 如果压缩后只剩一列:返回 Series
  • 如果压缩后只剩一行:返回 Series
  • 否则返回 DataFrame
  • 原始数据不会被修改。

🧪 示例代码及结果
示例 1:基本用法(DataFrame → Series)
import pandas as pd# 创建一个只有一列的 DataFrame
df = pd.DataFrame({'A': [1, 2, 3]})print("Original DataFrame:")
print(df)
输出:
   A
0  1
1  2
2  3
# squeeze() 自动压缩长度为 1 的列轴
squeezed = df.squeeze()
print("\nAfter squeeze():")
print(squeezed)
print("Type:", type(squeezed))
输出:
0    1
1    2
2    3
Name: A, dtype: int64
Type: <class 'pandas.core.series.Series'>

示例 2:压缩特定轴(axis=0axis=1
# 只有一行的 DataFrame
df_single_row = pd.DataFrame([[1, 2, 3]], columns=['A', 'B', 'C'])print("Original single-row DataFrame:")
print(df_single_row)
输出:
   A  B  C
0  1  2  3
# 压缩行轴(axis=0)
squeezed_row = df_single_row.squeeze(axis=0)
print("\nAfter squeeze(axis=0):")
print(squeezed_row)
print("Type:", type(squeezed_row))
输出:
A    1
B    2
C    3
dtype: int64
Type: <class 'pandas.core.series.Series'>
# 压缩列轴(axis=1)——不适用,因为列数 > 1
squeezed_col = df_single_row.squeeze(axis=1)
print("\nAfter squeeze(axis=1):")
print(squeezed_col)
输出(无变化):
   A  B  C
0  1  2  3

示例 3:压缩多维 DataFrame 中的单维度
# 多列但只有一行
df_single_row_multi_col = pd.DataFrame([[10, 20, 30]], columns=['X', 'Y', 'Z'])print("Original single-row multi-column DataFrame:")
print(df_single_row_multi_col)
输出:
    X   Y   Z
0  10  20  30
# 压缩行轴(axis=0)
squeezed_series = df_single_row_multi_col.squeeze()
print("\nAfter squeeze():")
print(squeezed_series)
print("Type:", type(squeezed_series))
输出:
X    10
Y    20
Z    30
dtype: int64
Type: <class 'pandas.core.series.Series'>

示例 4:DataFrame 不会压缩非单维度轴
# 正常二维 DataFrame
df_normal = pd.DataFrame({'A': [1, 2],'B': [3, 4]
})print("Normal DataFrame:")
print(df_normal)
输出:
   A  B
0  1  3
1  2  4
# squeeze() 对其无影响(没有长度为 1 的轴)
squeezed_normal = df_normal.squeeze()
print("\nAfter squeeze() on normal DataFrame:")
print(squeezed_normal)
print("Type:", type(squeezed_normal))
输出:
   A  B
0  1  3
1  2  4
Type: <class 'pandas.core.frame.DataFrame'>

示例 5:结合 .loc[] 使用进行动态压缩
# 从 DataFrame 中提取一行并压缩为 Series
row_squeezed = df_normal.loc[0].squeeze()
print("\nAfter .loc[0].squeeze():")
print(row_squeezed)
print("Type:", type(row_squeezed))
输出:
A    1
B    3
Name: 0, dtype: int64
Type: <class 'pandas.core.series.Series'>

🧠 应用场景
场景说明
提取单列/单行数据如从 DataFrame 提取某列或某行作为 Series
简化数据结构减少不必要的维度,便于后续操作(如绘图、计算等)
配合 groupby 使用在分组统计后提取单一结果
API 数据处理处理 API 返回的嵌套结构,提取唯一结果
可视化准备准备适合绘制折线图、柱状图的数据格式

⚠️ 注意事项
  • squeeze() 不会修改原始数据;
  • 只有当轴的长度为 1 时才会被压缩;
  • 若想强制压缩某一轴,需确保其长度为 1,否则无效;
  • 默认行为是压缩所有长度为 1 的轴;
  • 若你只想压缩行或列,请显式指定 axis=0axis=1
  • 压缩后返回的是 Series,注意索引和名称的保留。

✅ 总结对比
方法是否推荐使用说明
squeeze()✅ 推荐自动压缩所有长度为 1 的轴
squeeze(axis=0)✅ 推荐显式压缩行轴
squeeze(axis=1)✅ 推荐显式压缩列轴
df.iloc[:, 0]✅ 推荐提取第一列(类似 squeeze 效果)
df.loc[0]✅ 推荐提取第一行(类似 squeeze 效果)

你可以根据实际需求选择是否压缩某个轴、是否自动压缩所有单维度轴,从而灵活地将 DataFrame 转换为更简洁的结构。它是 Pandas 中非常实用的数据结构简化工具之一。

相关文章:

  • RISC-V物联网关,支持鸿蒙,T-Thread实时系统
  • Android 中 解析 XML 字符串的几种方式
  • 如何使用 Dockerfile 创建自定义镜像
  • 轻量级web开发框架之Flask web开发框架学习:get请求数据的发送
  • 国产芯片能在服务器领域替代Intel(经验总结贴)
  • phpstudy无法启动mysql,一启动就关闭,完美解决
  • WIFI原因造成ESP8266不断重启的解决办法
  • 【Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述】
  • 电影感户外柔和光线人像街拍摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 【内存】Linux 内核优化实战 - vm.max_map_count
  • Java枚举类如何避免反射攻击和序列化攻击
  • 零基础RT-thread第四节:电容按键
  • 自动化性能回退机制——蓝绿部署与灰度发布
  • Electron (02)集成 SpringBoot:服务与桌面程序协同启动方案
  • 回文链表C++
  • 设计模式精讲 Day 8:组合模式(Composite Pattern)
  • Transformer实战——Hugging Face环境配置与应用详解
  • 什么是seata
  • node.js在vscode的配置
  • 多线程八股
  • 小说阅读网站开发论文/搭建网站教程
  • 江宁网站建设价位/蚁坊软件舆情监测系统
  • wordpress 打不开页面/seo怎么做
  • 手机网站模板 餐饮/关键词搜索热度查询
  • 花溪区生态文明建设局网站/推广注册app拿佣金平台
  • 网店推广的目的/龙岩seo