pandas.DataFrame.squeeze#
- DataFrame.squeeze(axis=None)[源代码]#
将一维轴对象压缩为标量。
只有一个元素的 Series 或 DataFrames 会被压缩为一个标量。只有一个列或一个行的 DataFrames 会被压缩为一个 Series。否则对象保持不变。
当你不确定你的对象是 Series 还是 DataFrame,但你知道它只有一列时,这种方法最为有用。在这种情况下,你可以安全地调用 squeeze 以确保你有一个 Series。
- 参数:
- 轴{0 或 ‘index’, 1 或 ‘columns’, None}, 默认 None
要挤压的特定轴。默认情况下,所有长度为1的轴都会被挤压。对于 Series,此参数未使用并默认为 None。
- 返回:
- DataFrame, Series, 或标量
挤压 axis 或所有轴之后的投影。
参见
Series.iloc
基于整数位置的索引,用于选择标量。
DataFrame.iloc
基于整数位置的索引,用于选择 Series。
Series.to_frame
单列 DataFrame 的 DataFrame.squeeze 的逆操作。
例子
>>> 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
在使用 DataFrames 时,挤压效果更为显著。
>>> 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
因此,列可以被压缩,从而形成一个系列:
>>> 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
压缩行会产生一个标量序列:
>>> df_0a.squeeze("rows") a 1 Name: 0, dtype: int64
挤压所有轴将直接投影到一个标量:
>>> df_0a.squeeze() 1