我是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对象df1
和df2
的内容符合预期:
df1:
yvals
0 10.0
df2:
yvals
0 10.0
1 20.0
但是,应用squeeze()方法会为df1
和df2
提供不同的结果。
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。提前感谢您的帮助。
答案 0 :(得分:3)
这是预期的。如果尺寸为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