1. 程式人生 > 實用技巧 >PANDAS: 新手教程 一

PANDAS: 新手教程 一

作者|Ankit Goel
編譯|VK
來源|Towards Data Science

Pandas是一個強大的開源資料分析和操作庫。它可以幫助你對資料進行各種操作,並生成有關它的不同報告。我將把這篇文章分成兩篇

  1. 基本知識-我將在這個故事中介紹。我將介紹Pandas的基本功能,這些功能將使你大致瞭解如何開始使用Pandas,以及它如何幫助你節省大量時間。

  2. 高階-將通過高階的功能,使它更容易解決複雜的分析問題。它將涵蓋的主題,如風格,繪圖,讀取多個檔案等。第二部分仍在進行中,敬請期待。

在開始之前,確保你已經安裝了Pandas。如果沒有,你可以使用以下命令下載它。

# 如果你使用的是Anaconda
conda install -c conda-forge pandas

# 使用pip安裝Pandas
pip install pandas

# 匯入pandas
import pandas as pd

在這個練習中,我將使用著名的泰坦尼克號資料集。我建議你從Github下載資料和notebook,將其複製到你的環境中:https://github.com/ankitgoel1602/data-science/tree/master/data-analysis/pandas

有關資料的更多詳細資訊,請參閱Kaggle:https://www.kaggle.com/c/titanic/data?select=train.csv。

讓我們開始,我試圖保持資料分析的一般流程,比如從讀取資料開始,然後在資料分析過程中經歷不同的步驟。

1.使用read_csv或read_excel讀取資料

任何資料分析的起點都是獲取資料集。pandas提供不同的函式來讀取不同格式的資料。最常用的是

read_csv( )

這允許你讀取CSV檔案。

pd.read_csv('path_to_your_csv_file.csv')

panda提供了不同的選項來配置列名、資料型別或要讀取的行數。檢視Pandas read_csv API瞭解更多詳細資訊:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html。

read_excel( )

這允許你讀取Excel檔案。

pd.read_excel('path_to_your_excel_file.xlsx')

與CSV一樣,Pandas為read_excel提供了一組豐富的選項,允許你在excel中讀取特定的工作表名稱、資料型別或要讀取的行數。檢視Pandas read_excel API瞭解更多詳細資訊:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

Pandas支援很多其他資料型別。如果你正在使用其他資料型別,請檢視Pandas文件:https://pandas.pydata.org/pandas-docs/stable/reference/io.html

讀取泰坦尼克號資料集,我們將在這裡使用read_csv命令

# 你可以從提供的Github連結獲取它。

# 將Titanic資料集載入到titanic_data中
titanic_data = pd.read_csv('titanic_train.csv')

這將建立一個Pandas資料幀(如表),並將其儲存到titanic_data中。

接下來,我們將瞭解如何獲取有關載入的資料的更多詳細資訊。

2.使用head、tail或sample來探索資料。

一旦我們載入了資料,我們想回顧一下。panda提供了不同的api,我們可以使用它們來探索資料。

head( )

這類似於SQL中的TOP命令,從資料幀的開始給我們提供前'n'條記錄。

# 從資料幀中選擇前5(n=5)條記錄
titanic_data.head(5)

tail( )

這給了我們資料幀末尾的“n”條記錄。

# 從資料幀中選擇最後5條(n=5)條記錄
titanitc_data.tail(5)

sample( )

這將從資料中隨機獲取“n”個記錄。注意-此命令在不同執行時的輸出可能不同。

titanic_data.sample(5)

3.使用shape獲取資料維度

一旦我們有了資料,我們就需要知道我們要處理的行或列的數量,而Pandas的shape API提供的正是這些。讓我們看看

# dataframe的形狀,注意結尾沒有括號,因為它是dataframe的屬性
titanic_data.shape

(891, 12)

4.使用info( )檢視資料摘要

讓我們先看看這個的輸出

titanic_data.info()

正如你所看到的,“info”提供了一個很好的資料摘要,讓我們一個一個地瞭解它。

  1. 索引詳細資訊-Pandas中的每個資料幀都有一個索引,如果你熟悉SQL,它就像是我們建立用來訪問資料的索引。這裡意味著我們有一個從0到890的範圍索引,即總共891行。

  2. “info”生成的表中的每一行都向我們提供了有關列的詳細資訊、列中的值的數量以及pandas分配給它的資料型別。這對於瞭解缺失資料非常有用。例如我們可以說我們只有714行的“Age”資料。

  3. 記憶體使用-Pandas將資料幀載入到記憶體中,這將告訴我們資料集使用了多少記憶體。當我們有大的資料集時,這就很方便了。pandas有一個特定的API“memory_usage”來獲得更多關於記憶體的資訊。

5.使用describe()的資料統計

這給了我們關於資料集的統計資料。如你所見,我們的資料幀如下所示

如你所見,它為每一列提供了許多資訊,如記錄計數(不計算丟失的記錄,如年齡)、平均值、標準差、最小值和不同分位數百分比。預設情況下,此命令提供有關數值資料型別(如int或float)的資訊。要獲取“object”列的統計資訊,我們可以執行

# 顯示有關物件列的統計資訊
titanic_data.describe(include=['O'])

如果你注意到,我們在describe API中添加了'include'引數,它是一個列表,我們可以傳遞多個值,比如-

  • include=[‘O’, ’int64']-將提供關於DataFrame中Object和int64型別列的統計資訊。

  • include=[‘O’, ‘float64’]-將提供關於DataFrame中Object和float64型別列的統計資訊。

與“include”類似,我們也可以使用“exclude”,它將在計算統計時排除列型別。如果你對更多細節感興趣,請參閱Pandas文件:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html。

6.使用loc和iloc進行資料選擇

這些都是非常有用的函式,可以幫助我們選擇資料。使用這些我們可以選擇資料的任何部分。為了更好地理解它,讓我們更改資料的索引(如果你不理解,請不要擔心,我將在第2部分中討論)。

# 將資料幀的索引從RangeIndex更改為“Ticket”值
titanic_ticket_index = titanic_data.set_index('Ticket')

loc( )

這將根據標籤(即列和行的名稱)選擇資料。例如,在上面的資料中,行標籤類似於A/5 21171, PC17599, 113803,列標籤類似於PassengerId, Survived, Sex。loc的一般語法是-

dataframe_name.loc[row_labels, column_labels(optional)]

行標籤和列標籤可以採用不同的值。讓我們看一些例子來更好地理解它。

選擇單行

輸入你想要的行的標籤,即,如果我們想選擇'Ticket',其中的值是'A/5 21171'。

# 注意我們需要使用[]方括號

# 這將返回與名稱匹配的行的資料。
titanic_ticket_index.loc['A/5 21171']

選擇多行

很多時候,我們需要選擇多行,以便進一步分析。.loc API可以獲取要選擇的行標籤列表,即。

或者類似的

# 我們可以提供 start_label:end_label

# 這裡我們選擇標籤為“PC 17599”到“373450”的行
titanic_ticket_index.loc['PC 17599':'373450']

注意-如果多行具有相同的標籤,這將不起作用。

選擇單列

這與我們選擇行的方式類似,但是在選擇列時,我們需要告訴Pandas我們要選擇的行。我們可以用“:”代替行標籤,這意味著我們要選擇所有行。

# 為所有行選擇列。
titanic_ticket_index.loc[:,'Embarked']

選擇多個列

與我們對多行所做的類似,只需要告訴Pandas我們正在選擇哪些行。

# 為所有行選擇Sex, Age, Fare, Embarked列 .
titanic_ticket_index.loc[:,['Sex','Age','Fare','Embarked']]

或者類似的

# 我們可以提供start_label:end_label
# 在這裡,我們選擇的列為 label 'Sex' 到 'Embarked'
titanic_ticket_index.loc[:, 'Sex':'Embarked']

選擇特定的行和列

iloc()

這與loc類似,但基於索引而不是標籤選擇行和列。與標籤不同的是,索引總是從0開始,到第7行的數目是1,列的索引總是從0到第1列。

讓我們看一個例子

# 選擇特定的行和列:示例2
# 對於列和行我們都可以用start_label:end_label

# 選擇第3至第6行和第1至第4列
# 結束索引應比所需的行或列大1
titanic_ticket_index.iloc[3:7, 1:5]

在這裡,我們沒有像對“loc”那樣檢視示例。如果你想知道我們是如何使用iloc實現同樣的結果的,你可以參考Github:https://github.com/ankitgoel1602/data-science/blob/master/data-analysis/pandas/pandas_basic_functions_overview.ipynb

7.在列中使用value_counts()獲取唯一值

Value_counts為我們提供列中唯一值的計數,這對於瞭解以下資訊非常有用

  • 列中有不同的值。

  • 最常見值。

  • 最頻繁值的比例。

# Sex列的值計數。
titanic_data['Sex'].value_counts()

# 輸出
male      577
female    314
Name: Sex, dtype: int64

如你所見,我們的資料集包含了更多的男性。我們甚至可以將其標準化以檢視值之間的分佈。

# 為性別列計數並標準化
titanic_data['Sex'].value_counts(normalize=True)

#輸出
male      0.647587
female    0.352413
Name: Sex, dtype: float64

這意味著,在我們的資料集中,男性與女性的比例約為65:35。

8.使用query( )篩選資料

通常,我們使用難以分析的大型資料集。在這種情況下,策略是過濾不同條件下的資料並對其進行分析。我們只需使用Pandas查詢API的一行程式碼就可以做到這一點。

讓我們舉幾個例子來更好地理解它。

選擇年齡>15的行。

# 前5個年齡大於15歲的記錄
titanic_data.query('Age > 15').head(5)

選擇倖存的男性。

# 前5名倖存的男性
titanic_data.query('Sex=="male" and Survived==1').head(5)

我們可以定義變數並使用它們來編寫過濾器查詢。當我們需要編寫指令碼時,它會很方便。

# gender_to_select和min_fare,這些都可以作為引數的一部分傳遞給指令碼
gender_to_select = "female"
min_fare = 50

# 使用傳遞的屬性查詢
titanic_data.query('(Sex==@gender_to_select) and (Fare > @min_fare)')

結論

我希望這篇文章能幫助你開始使用Pandas並簡化資料分析過程。如前所述,在本文中,我試圖涵蓋涉及資料分析過程不同領域的基本函式。我將繼續補充更多。

Pandas提供了許多不同的api,可以幫助對資料執行高階操作,如繪圖、風格等。我將在本系列的第2部分中介紹這些api。

原文連結:https://towardsdatascience.com/pandas-put-away-novice-data-analyst-status-part-1-7e1f0107dae0

歡迎關注磐創AI部落格站:
http://panchuang.net/

sklearn機器學習中文官方文件:
http://sklearn123.com/

歡迎關注磐創部落格資源彙總站:
http://docs.panchuang.net/