PANDAS: 新手教程 一

做者|Ankit Goel
編譯|VK
來源|Towards Data Sciencehtml

Pandas是一個強大的開源數據分析和操做庫。它能夠幫助你對數據進行各類操做,並生成有關它的不一樣報告。我將把這篇文章分紅兩篇python

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

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

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

# 若是你使用的是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/pandasbash

有關數據的更多詳細信息,請參閱Kaggle:https://www.kaggle.com/c/titanic/data?select=train.csv。機器學習

讓咱們開始,我試圖保持數據分析的通常流程,好比從讀取數據開始,而後在數據分析過程當中經歷不一樣的步驟。函數

1.使用read_csv或read_excel讀取數據

任何數據分析的起點都是獲取數據集。pandas提供不一樣的函數來讀取不一樣格式的數據。最經常使用的是學習

read_csv( )

這容許你讀取CSV文件。.net

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/

相關文章
相關標籤/搜索