python - Pandas的squeeze()函数中可能出现错误

标签 python pandas numpy

我是 Pandas 的一个相对较新的用户,一直在使用它来分析 BLS(劳工统计局)时间序列(从他们的 ftp 站点下载)。但是我遇到了一个问题,我在下面的Python程序中重现了这个问题:

import pandas as pd
import numpy  as np

yvals1 = np.array( [10.] )
yvals2 = np.array( [10., 20.] )

df1 = pd.DataFrame({"yvals": yvals1})
df2 = pd.DataFrame({"yvals": yvals2})

DataFrame 对象 df1df2 的内容符合预期:

df1: 
   yvals
0   10.0

df2: 
   yvals
0   10.0
1   20.0

但是,应用squeeze() 方法会为df1df2 提供不同的结果。

df1.squeeze(): 
10.0

f2.squeeze(): 
0    10.0
1    20.0
Name: yvals, dtype: float64

正如文档所预期的那样,df2.squeeze() 给出了一个包含两行的 Pandas Series 对象,但 df1.squeeze() 给出了一个标量 numpy .float64 而不是一行的 Panda Series 对象。这一定是一个错误,而不是一个功能,因为当没有预先信息时,具有 1 行的系列应该与任何其他系列一样对待。

我正在使用Python 2.7.13和Pandas 0.20.1。预先感谢您的帮助。

最佳答案

这符合预期。 squeeze 正在消除尺寸为 1

的尺寸

因此,大小为 (2, 1) 的数据帧被压缩为 (2, ) ,大小为 (1, 1) 的数据帧> 被压缩为标量。

要获得预期结果,请使用 axis=1 参数

df1.squeeze(axis=1)

0    10.0
Name: yvals, dtype: float64

来自工具提示

Signature: df1.squeeze(axis=None)
Docstring:
Squeeze length 1 dimensions.

Parameters
----------
axis : None, integer or string axis name, optional
    The axis to squeeze if 1-sized.

    .. versionadded:: 0.20.0

Returns
-------
scalar if 1-sized, else original object
File:      //anaconda/envs/3.6/lib/python3.6/site-packages/pandas/core/generic.py
Type:      method

关于python - Pandas的squeeze()函数中可能出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575776/

相关文章:

python - Pandas 将值与具有过滤条件的前一行进行比较

python - 比较同一数据框列中的值

python - 将大数据加载到 TensorFlow 2.0 中,而不将其加载到 RAM 上

python - 使用 Python 和 Sympy 进行三角恒等式,tan(A/2) = (sin A )/(1 + cos A)

python - pandas 和 csv 如何在不保存的情况下将 csv 创建为字符串

python - 在 Pandas 中跨多列排列行值

python - 从单行 pandas DataFrame 中提取值

python - 如何在一行中打印一个 numpy.array?

python - 用 Pandas 计数和排序

python - 对两个列表使用 max 函数有什么意义?