Python 函数中可能存在错误
我是Pandas的新用户,一直在使用它分析BLS(劳工统计局)时间序列(从他们的ftp站点下载)。但是我遇到了一个问题,我在下面的Python程序中重现了这个问题:Python 函数中可能存在错误,python,pandas,numpy,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":
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})
数据帧对象df1
和df2
的内容与预期一致:
df1:
yvals
0 10.0
df2:
yvals
0 10.0
1 20.0
但是,对df1
和df2
应用squence()方法会得到不同的结果
df1.squeeze():
10.0
f2.squeeze():
0 10.0
1 20.0
Name: yvals, dtype: float64
正如文档中所预期的那样,df2.squence()
提供了一个具有两行的Panda系列对象,但是df1.squence()
提供了一个标量numpy.float64
而不是一个具有一行的Panda系列对象。这必须是一个bug,而不是一个特性,因为当一个系列没有高级信息时,一个系列有一行应该被视为与任何其他系列相同
我正在使用Python 2.7.13和Pandas 0.20.1。提前感谢您的帮助。这是意料之中的事<代码>挤压是在尺寸为
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
谢谢你的快速回复。我应该意识到
squere()
现在有一个axis
参数。有趣的是,对于单行,默认的axis=None
给出了一个标量,但是axis=0
和axis=1
都给出了Pandas系列对象。无论如何,再次感谢你;你给了我更多的思考。