看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas squeeze() 方法顾名思义就是数据挤压、类型压缩,本质上是对数据进行降维。当您不知道对象是序列还是 DataFrame 时,但知道它只有一列时,此方法最有用,在这种情况下,您可以安全地调用 squeeze(),以确保其最终是一个 Series。
我们知道,数据的维度从标量(0维)到 Series(一维),再到 DataFrame(二维),是一个维数增加的过程,但在实际数据处理中,会出现虽然是二维数据,但只有一列,这时候就需要将它降至一维。同样,虽然是一个一维数据,但只有一个值(元素),这时我们只需要取它的标量形式,也是从一维降至 0 维。
pandas squeeze() (读音为 /skwiːz/) 就是提供了以上的一个处理过程的操作。如果无法按以上逻辑操作就返回原数据。
当我们不知道返回的对象类型是 Series 还是 DataFrame,但是知道它只有一列时,squeeze() 方法最有用。在这种情况下,我们可以安全地调用 squeeze() 以确保它变成一个 Series。
squeeze() 方法的语法是:
DataFrame.squeeze(axis=None)
Series.squeeze(axis=None)
参数:
处理逻辑:
以下是一些简单的示例:
# Series 挤压
df.Q1.squeeze()
# 一列 DataFrame 挤压
df[['Q1']].squeeze()
'''
0 89
1 36
2 57
3 93
4 65
..
95 48
96 21
97 98
98 11
99 21
Name: Q1, Length: 100, dtype: int64
'''
df.Q1.head(1).squeeze()
# 89
# 长度为1的轴
df.loc[df.index==0].squeeze()
# 沿着行方向挤压
df.loc[df.index==0].squeeze(0)
'''
name Liver
team E
Q1 89
Q2 21
Q3 24
Q4 64
Name: 0, dtype: object
'''
# 沿着列方向挤压
df.loc[df.index==0].squeeze(1)
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
'''
以下是一些官网的示例:
primes = pd.Series([2, 3, 5, 7])
# 切片操作可能会生成具有单个值的序列:
even_primes = primes[primes % 2 == 0]
even_primes
'''
0 2
dtype: int64
'''
even_primes.squeeze()
# 2
# 在每个轴上压缩具有多个值的对象不会产生任何效果:
odd_primes = primes[primes % 2 == 1]
odd_primes
'''
1 3
2 5
3 7
dtype: int64
'''
odd_primes.squeeze()
'''
1 3
2 5
3 7
dtype: int64
'''
# 与数据帧一起使用时,压缩甚至更有效
df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])
df
'''
a b
0 1 2
1 3 4
'''
# 对单个列进行切片将生成一个数据帧,其中列只有一个值:
df_a = df[['a']]
df_a
'''
a
0 1
1 3
'''
# 因此,列可以被压缩,从而产生一系列:
df_a.squeeze('columns')
'''
0 1
1 3
Name: a, dtype: int64
'''
# 从一列中切片一行将生成一个标量数据帧:
df_0a = df.loc[df.index < 1, ['a']]
'''
df_0a
a
0 1
'''
# 压缩行会生成一个标量序列:
df_0a.squeeze('rows')
'''
a 1
Name: 0, dtype: int64
'''
# 压缩所有轴将直接投影到标量中:
df_0a.squeeze()
# 1
squeeze() 方法适用的对象有:
更新时间:2022-04-15 18:55:00 标签:pandas 降维