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
df = pd.DataFrame({'A': [1, 2, 3]})print("Original DataFrame:")
print(df)
输出:
A
0 1
1 2
2 3
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=0
或 axis=1
)
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
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'>
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
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 不会压缩非单维度轴
df_normal = pd.DataFrame({'A': [1, 2],'B': [3, 4]
})print("Normal DataFrame:")
print(df_normal)
输出:
A B
0 1 3
1 2 4
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[]
使用进行动态压缩
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=0
或 axis=1
; - 压缩后返回的是
Series
,注意索引和名称的保留。
✅ 总结对比
方法 | 是否推荐使用 | 说明 |
---|
squeeze() | ✅ 推荐 | 自动压缩所有长度为 1 的轴 |
squeeze(axis=0) | ✅ 推荐 | 显式压缩行轴 |
squeeze(axis=1) | ✅ 推荐 | 显式压缩列轴 |
df.iloc[:, 0] | ✅ 推荐 | 提取第一列(类似 squeeze 效果) |
df.loc[0] | ✅ 推荐 | 提取第一行(类似 squeeze 效果) |
你可以根据实际需求选择是否压缩某个轴、是否自动压缩所有单维度轴,从而灵活地将 DataFrame 转换为更简洁的结构。它是 Pandas 中非常实用的数据结构简化工具之一。