Summary functions
reviews()
輸出如下:
country | description | designation | points | price | province | region_1 | region_2 | taster_name | taster_twitter_handle | title | variety | winery |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Italy | Aromas include tropical fruit, broom, brimston... | Vulkà Bianco | 87 | NaN | Sicily & Sardinia | Etna | NaN | Kerin O’Keefe | @kerinokeefe | Nicosia 2013 Vulkà Bianco (Etna) | White Blend |
1 | Portugal | This is ripe and fruity, a wine that is smooth... | Avidagos | 87 | 15.0 | Douro | NaN | NaN | Roger Voss | @vossroger | Quinta dos Avidagos 2011 Avidagos Red (Douro) | Portuguese Red |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
129969 | France | A dry style of Pinot Gris, this is crisp with ... | NaN | 90 | 32.0 | Alsace | Alsace | NaN | Roger Voss | @vossroger | Domaine Marcel Deiss 2012 Pinot Gris (Alsace) | Pinot Gris |
129970 | France | Big, rich and off-dry, this is powered by inte... | Lieu-dit Harth Cuvée Caroline | 90 | 21.0 | Alsace | Alsace | NaN | Roger Voss | @vossroger | Domaine Schoffit 2012 Lieu-dit Harth Cuvée Car... | Gewürztraminer |
129971 rows × 13 columns
-
Pandas提供了許多簡單的“Summary functions”(不是官方名稱),它們以某種有用的方式重組資料。例如,考慮
describe()
方法:reviews.points.describe()
輸出如下:
-
此方法生成給定列屬性的高階摘要。它是型別感知的,這意味著其輸出會根據輸入的資料型別而變化。上面的輸出僅對數值資料有意義;對於字串資料,我們得到的是:
reviews.taster_name.describe()
輸出如下:
-
如果你想獲得關於
DataFrame
或Series
中某一列的特定簡單彙總統計資訊,通常會有一個有用的 pandas 函式來實現。-
例如,要檢視分數的平均值(例如,平均評級的葡萄酒表現如何),我們可以使用
mean()
函式:reviews.points.mean()
輸出如下:
-
要檢視唯一值列表,我們可以使用
unique()
函式。reviews.taster_name.unique()
輸出如下:
-
要檢視資料集中的唯一值列表以及它們出現的頻率,可以使用
value_counts()
方法:reviews.taster_name.value_counts()
輸出如下:
-
Maps
-
在數學中借用的術語
map
指的是一種函式,它接收一組值並將其“對映”到另一組值。在資料科學中,我們經常需要從現有資料建立新的表示形式,或者將資料從當前的格式轉換為我們以後想要的格式。Maps
(對映)就是處理這項工作的工具,因此它們對於完成你的工作極其重要! -
有兩種對映方法是你會經常使用的。
-
map()
是第一個,也是稍微簡單一點的那個。例如,假設我們想將葡萄酒獲得的分數重新調整為 0。我們可以如下操作:review_points_mean = reviews.points.mean() reviews.points.map(lambda p: p - review_points_mean)
輸出如下:
傳遞給map()
的函式應該是Series
中的單個值(在上面的示例中是point值),並返回該值的轉換版本。map()
返回一個新的Series
,其中所有值都已由您的函式轉換。 -
如果我們想透過在每一行上呼叫自定義方法來轉換整個
DataFrame
,則apply()
是等效的方法。def remean_points(row): row.points = row.points - review_points_mean return row reviews.apply(remean_points, axis='columns')
輸出如下:
country description designation points price province region_1 region_2 taster_name taster_twitter_handle title variety winery 0 Italy Aromas include tropical fruit, broom, brimston... Vulkà Bianco -1.447138 NaN Sicily & Sardinia Etna NaN Kerin O’Keefe @kerinokeefe Nicosia 2013 Vulkà Bianco (Etna) White Blend 1 Portugal This is ripe and fruity, a wine that is smooth... Avidagos -1.447138 15.0 Douro NaN NaN Roger Voss @vossroger Quinta dos Avidagos 2011 Avidagos Red (Douro) Portuguese Red ... ... ... ... ... ... ... ... ... ... ... ... ... 129969 France A dry style of Pinot Gris, this is crisp with ... NaN 1.552862 32.0 Alsace Alsace NaN Roger Voss @vossroger Domaine Marcel Deiss 2012 Pinot Gris (Alsace) Pinot Gris 129970 France Big, rich and off-dry, this is powered by inte... Lieu-dit Harth Cuvée Caroline 1.552862 21.0 Alsace Alsace NaN Roger Voss @vossroger Domaine Schoffit 2012 Lieu-dit Harth Cuvée Car... Gewürztraminer 129971 rows × 13 columns
-
如果我們使用
axis='index'
呼叫reviews.apply()
,那麼我們就不需要傳遞一個函式來轉換每一行,而是需要提供一個函式來轉換每一列。 -
請注意,
map()
和apply()
分別返回新的、轉換後的Series
和DataFrame
。它們不會修改呼叫它們的原始資料。如果我們檢視第一行評論,我們可以看到它仍然具有其原始分數值。reviews.head(1)
輸出如下:
country description designation points price province region_1 region_2 taster_name taster_twitter_handle title variety winery 0 Italy Aromas include tropical fruit, broom, brimston... Vulkà Bianco 87 NaN Sicily & Sardinia Etna NaN Kerin O’Keefe @kerinokeefe Nicosia 2013 Vulkà Bianco (Etna) White Blend
-
-
Pandas 內建了許多常見的對映操作。
-
例如,下面是一種更快速地重新定義point列的方法:
review_points_mean = reviews.points.mean() reviews.points - review_points_mean
輸出如下:
在這段程式碼中,我們在左側的許多值(series
中的所有內容)和右側的單個值(平均值)之間執行操作。Pandas 檢視這個表示式並推斷出我們是想從資料集中的每個值中減去那個平均值。 -
如果我們在等長
series
之間執行這些操作,Pandas 也會理解該怎麼做。例如,在資料集中組合國家和地區資訊的一種簡單方法是執行以下操作reviews.country + " - " + reviews.region_1
輸出如下:
-
這些運算子比
map()
或apply()
更快,因為它們使用了 pandas 內建的加速功能。所有標準 Python 運算子(>、<、== 等)都以這種方式工作。 -
但是,它們不像
map()
或apply()
那樣靈活,後者可以執行更高階的操作,例如應用條件邏輯,而這無法僅透過加法和減法來完成。
-