![](/img/trans.png)
[英]Python Pandas: Filling data frame with pd.Series in each element
[英]Pandas pd.series returns a data frame
我想问一个关于熊猫系列的问题。
我正在阅读 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 dp。
现在,我了解到函数也可以返回具有多个值的系列:
def f(x):
return pd.Series([x.min(), x.max()], index=['min', 'max'])
正如文献所述:
许多最常见的数组统计信息(如 sum 和 mean)都是 DataFrame 方法,因此没有必要使用 apply。 传递给 apply 的 function 不需要返回标量值; 它还可以返回具有多个值的系列。
并运行以下代码
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
然而,function 的结果似乎是一系列二维性质的,这对我来说没有意义。
function 是如何出现的,以制作一系列具有二维性质的作品?
有趣的是,做
type(frame.applymap(format))
回报
pandas.core.frame.DataFrame
我不知道为什么会这样。
Pandas 系列是某种类型的一维数组。 DataFrame 是一个二维数组,其中每一列都是一个系列,它们可以有不同的类型。
但是,您可能缺少的部分是“类型”可以是通用的 Python object
,它是对任何 object 的引用。例如:
pd.Series([[1,2],[3,4]])
给你:
0 [1, 2]
1 [3, 4]
dtype: object
这是 Python 列表的一维数组(甚至不必具有统一长度)。
在 Pandas(或 NumPy)中使用object
dtype 通常不是最佳选择,应尽可能避免。 在上面的示例中,您可以将Series
替换为DataFrame
以获得更优化的表示。 object
是次优的,因为 Pandas 本身并不理解其中的大部分内容,因此必须使用 Python 解释器对数组中的每个值进行任何操作,而不是像 dtype 为int
或一些其他类型 Pandas 本机理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.