pandas指南-3.數據摘要與映射

目錄

數據摘要與映射

摘要功能

映射


數據摘要與映射

import pandas as pd
pd.set_option('max_rows', 5)
import numpy as np
melbourne_data = pd.read_csv('melb_data.csv') 
melbourne_data.head()

摘要功能

pandas提供了許多簡單的“彙總函數”(不是正式名稱),它以某種有用的方式重構數據。 例如,考慮describe方法:

melbourne_data.Price.describe()

此方法生成給定列的屬性的高級摘要。 它是類型感知的,這意味着它的輸出根據輸入的dtype而改變。 上面的輸出只對數值數據有意義; 對於字符串數據,這是我們得到的:

melbourne_data.Address.describe()
count             13580
unique            13378
top       5 Margaret St
freq                  3
Name: Address, dtype: object

如果你想獲得有關DataFrame或Series中的列的特定簡單摘要統計信息,通常會有一個有用的pandas函數來實現它。 例如,要查看分配的點的平均值,我們可以使用平均函數mean: 

melbourne_data.Price.mean()

1075684.079455081

要查看唯一值列表,我們可以使用唯一函數unique:

melbourne_data.Address.unique()

array(['85 Turner St', '25 Bloomburg St', '5 Charles St', ...,
       '83 Power St', '96 Verdon St', '6 Agnes St'], dtype=object) 

要查看唯一值列表以及它們在數據集中出現的頻率,我們可以使用value_counts方法:

melbourne_data.Address.value_counts()

5 Margaret St       3
53 William St       3
5 Charles St        3
                   ..
9 Ambon Ct          1
2/28 Caroline St    1
174 South Rd        1
Name: Address, Length: 13378, dtype: int64 

映射

“映射”是一個從數學中借用的術語,用於獲取一組值並將它們“映射”到另一組值的函數。 在數據科學中,我們經常需要從現有數據創建新的表示,或者將數據從現在的格式轉換爲我們希望它在以後的格式。 映射是處理這項工作的地方,對於完成工作非常重要!

你經常會使用兩種映射方法。 Series.map是第一個,稍微簡單一點。 例如,假設我們想要將房價重新計算爲現在價格減掉均值.我們可以這樣做:

price_mean = melbourne_data.Price.mean()
melbourne_data.Price.map(lambda p: p - price_mean)
0        4.043159e+05
1       -4.068408e+04
2        3.893159e+05
             ...     
13577    9.431592e+04
13578    1.424316e+06
13579    2.093159e+05
Name: Price, Length: 13580, dtype: float64

傳遞給map的函數應該期望Series中的單個值(在上面的示例中爲點值),並返回該值的轉換版本。 map返回一個新Series,其中所有值都已由你的函數轉換。

如果我們想要通過在每一行上調用自定義方法來轉換整個DataFrame,DataFrame.apply是靠譜的方法。

def remean_price(row):
    row.Price = row.Price - price_mean
    return row
  
melbourne_data.apply(remean_price, axis='columns')

如果我們使用axis ='index'調用了reviews.apply,那麼我們需要提供一個函數來轉換每一列,而不是傳遞一個函數來轉換每一行。

請注意,Series.map和DataFrame.apply分別返回新的,已轉換的Series和DataFrame。 它們不會修改它們被調用的原始數據。 如果我們查看第一行房價數據,我們可以看到它仍然具有原始點值。

melbourne_data.head(1)

pandas提供許多常見的映射操作作爲內置函數。 例如,這是一種更快速的方法來重新記錄我們的點列:

price_mean = melbourne_data.Price.mean()
melbourne_data.Price - price_mean
0        4.043159e+05
1       -4.068408e+04
2        3.893159e+05
             ...     
13577    9.431592e+04
13578    1.424316e+06
13579    2.093159e+05
Name: Price, Length: 13580, dtype: float64

在這段代碼中,我們在左側的許多值(Series中的所有內容)和右側的單個值(平均值)之間執行操作。 pandas查看此表達式並指出我們必須從數據集中的每個值中減去該平均值。

如果我們在相等長度的系列之間執行這些操作,pandas也將理解該怎麼做。 例如,在數據集中組合區縣和地址信息的簡單方法是執行以下操作:

melbourne_data.Suburb + " - " + melbourne_data.Address
0           Abbotsford - 85 Turner St
1        Abbotsford - 25 Bloomburg St
2           Abbotsford - 5 Charles St
                     ...             
13577      Williamstown - 83 Power St
13578     Williamstown - 96 Verdon St
13579         Yarraville - 6 Agnes St
Length: 13580, dtype: object

這些運算符比map或apply更快,因爲它們使用內置於pandas中的加速。 所有標準Python運算符(>,<,==等)都以這種方式工作。

然而,它們並不像map或apply那樣靈活,它可以做更高級的事情,比如應用條件邏輯,這不能僅通過加法和減法來完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章