簡體   English   中英

Pandas pd.series 返回一個數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM