【发布时间】:2020-10-24 00:13:46
【问题描述】:
我想问一个关于熊猫系列的问题。
我正在阅读 O'Reilly 出版的关于 Python 的数据科学书籍,并且正在阅读 Pandas。
考虑以下代码:
frame = pd.DataFrame(np.random.randn(4,3), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
此代码提供以下结果。
b d e
Utah -0.81 0.43 -0.50
Ohio 1.67 -0.67 1.30
Texas 0.53 -0.32 0.80
Oregon 0.25 0.91 0.70
所有值均手动表示为 3 d.p。为方便起见。
现在,我了解到函数也可以返回具有多个值的系列:
def f(x):
return pd.Series([x.min(), x.max()], index=['min', 'max'])
如文献所述:
许多最常见的数组统计信息(如 sum 和 mean)都是 DataFrame 方法,因此不需要使用 apply。传递给 apply 的函数不需要返回标量值;它还可以返回一个具有多个值的系列。
并运行以下代码
frame.apply(f)
产生以下结果:
b d e
min -0.82 -0.67 -0.50
max 1.67 0.91 1.30
此代码有效。
但是,我在这里感到困惑。
我认为一个系列应该只是一维的,即伪单列数据结构,只有每个对应元素的索引。
例如
>>> s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
>>> s
a 0.469112
b -0.282863
c -1.509059
d -1.135632
e 1.212112
dtype: float64
但是,函数的结果似乎是一系列二维性质,这对我来说没有意义。
这个函数是如何形成一系列二维性质的?
有趣的是,做
type(frame.applymap(format))
返回
pandas.core.frame.DataFrame
我不知道为什么会这样。
【问题讨论】:
-
您只是对结果感到困惑。实际上,该函数仅用于查找最大值和最小值,然后将其应用于数据框。 frame.apply(f) 此后返回结果以将其应用于您的数据框,因此仍与 Series 上的数据框相关。
-
哦,我想我明白了。 @Amin 该函数返回一个系列,但我们仍然将该函数应用于每一列,即
axis=0,所以我们在frame.apply(f)之后的最终结果是一个数据框,即使我们的初始函数首先返回一个series? -
是的。通过调用该函数('f'),我们只是尝试将我们的方法展示给数据框,然后将其应用到数据框。数据框采用此函数功能并将其应用于所有列。
标签: python pandas dataframe series