pandas.Series.squeeze#

Series.squeeze(axis=None)[源代码]#

将一维轴对象压缩成标量。

只有一个元素的 Series 或 DataFrame 会被压缩成一个标量。只有一个列或一行的 DataFrame 会被压缩成一个 Series。否则,对象保持不变。

当您不确定您的对象是 Series 还是 DataFrame,但确实知道它只有一个列时,此方法最为有用。在这种情况下,您可以安全地调用 squeeze 以确保您获得的是 Series。

Parameters:
axis{0 或 ‘index’, 1 或 ‘columns’, None}, default None

要压缩的特定轴。默认情况下,所有长度为 1 的轴都会被压缩。对于 Series,此参数未使用,默认为 None

Returns:
DataFrame、Series 或标量

压缩 axis 或所有轴后的投影。

参见

Series.iloc

用于选择标量的基于整数位置的索引。

DataFrame.iloc

用于选择 Series 的基于整数位置的索引。

Series.to_frame

对于单列 DataFrame,DataFrame.squeeze 的反向操作。

Examples

>>> primes = pd.Series([2, 3, 5, 7])

切片可能会产生一个只有一个值的 Series:

>>> 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

对于 DataFrame,压缩甚至更有效。

>>> df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])
>>> df
   a  b
0  1  2
1  3  4

切片一个单列会产生一个列值只有一个的 DataFrame:

>>> df_a = df[['a']]
>>> df_a
   a
0  1
1  3

因此,可以压缩列,从而得到一个 Series:

>>> df_a.squeeze('columns')
0    1
1    3
Name: a, dtype: int64

从单列中切片单行会产生一个单标量 DataFrame:

>>> df_0a = df.loc[df.index < 1, ['a']]
>>> df_0a
   a
0  1

压缩行会产生一个单标量 Series:

>>> df_0a.squeeze('rows')
a    1
Name: 0, dtype: int64

压缩所有轴会将直接投影到标量:

>>> df_0a.squeeze()
1