熊猫pd.series返回数据帧

时间:2020-10-24 00:13:46

标签: python pandas dataframe series

我想问一个关于熊猫系列的问题。

我正在阅读O'Reilly出版的一本关于Python的数据科学书籍,并且正在读熊猫。

考虑以下代码:

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    

所有值均手动表示为3d.p。为方便起见。

现在,我了解到函数还可以返回具有多个值的Series:

def f(x):
    return pd.Series([x.min(), x.max()], index=['min', 'max'])

如文献所述:

许多最常见的数组统计信息(例如sum和mean)都是DataFrame方法,因此不必使用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

我不知道为什么会这样。

1 个答案:

答案 0 :(得分:0)

Pandas系列是某种类型的一维数组。 DataFrame是一个2D数组,其中每一列都是一个Series,并且它们可以具有不同的类型。

但是,您可能缺少的部分是“类型”可以是通用Python object,它是对任何对象的引用。例如:

pd.Series([[1,2],[3,4]])

给你:

0    [1, 2]
1    [3, 4]
dtype: object

这是Python列表的一维数组(甚至不必具有统一的长度)。

在熊猫(或NumPy)中使用object dtype通常不是最佳选择,应尽可能避免使用。在上面的示例中,您可以将Series替换为DataFrame,以获得更好的表示。 object dtype是次优的,因为Pandas本身并不了解其中的大多数,因此必须使用Python解释器对数组中的每个值进行任何操作,而不是通过编译后的代码来加速(如果dtype是int或Pandas原生理解的其他类型。