Python Pandas 模組教程

Python Pandas 模組

  • Pandas 是 Python 中的一個開源庫。它提供了 ready to use 高性能的數據結構和數據分析工具。
  • Pandas 模組運行在 NumPy 之上,並且廣泛用於數據科學和數據分析。
  • NumPy 是一個低級數據結構,支持多維數組和各種數學數組操作。Pandas 具有更高級的接口。它還提供了簡化的表格數據對齊和強大的時間序列功能。
  • DataFrame 是 Pandas 中的關鍵數據結構。它允許我們將表格數據存儲和操作為二維數據結構。
  • Pandas 在 DataFrame 上提供了豐富的功能集。例如,數據對齊,數據統計,切片,分組,合併,連接數據等。

安裝和開始使用 Pandas

安裝 Pandas 模組需要 Python 2.7 及以上版本。如果你使用 conda,則可以使用以下命令來安裝。

conda install pandas

如果您正在使用PIP,請運行以下命令來安裝pandas模組。

pip3.7 install pandas
Python Install Pandas Module

要在Python腳本中導入Pandas和NumPy,請添加以下代碼片段:

import pandas as pd
import numpy as np

由於Pandas依賴於NumPy庫,我們需要導入此依賴。


Pandas模組中的數據結構

Pandas模組提供了3種數據結構,如下所示:

  • Series:它是一種1維的大小不可變的類似數組的結構,其中的數據是同類型的。
  • DataFrames:它是一種2維的大小可變的表格結構,其中的列可以是不同類型的。
  • Panel:它是一種3維的大小可變的數組。

Pandas DataFrame

DataFrame是最重要且廣泛使用的數據結構,它是存儲數據的標準方式。DataFrame將數據以行和列的方式對齊,類似於SQL表或電子表格數據庫。我們可以將數據直接編碼到DataFrame中,也可以導入CSV文件、tsv文件、Excel文件、SQL表等。我們可以使用以下構造函數來創建DataFrame對象。

pandas.DataFrame(data, index, columns, dtype, copy)

以下是參數的簡短描述:

  • 資料 – 從輸入資料建立一個 DataFrame 物件。它可以是列表、字典、序列、Numpy ndarrays,甚至其他任何 DataFrame。
  • 索引 – 具有列標籤
  • – 用於建立列標籤
  • dtype – 用於指定每個列的資料類型,可選參數
  • 複製 – 如果有資料,用於複製資料

有許多建立 DataFrame 的方式。我們可以從字典或字典列表中創建 DataFrame 物件。我們也可以從元組列表、CSV、Excel 檔案等創建它。讓我們運行一個簡單的程式碼,從字典列表創建一個 DataFrame。

import pandas as pd
import numpy as np
df = pd.DataFrame({
    "State": ['Andhra Pradesh', 'Maharashtra', 'Karnataka', 'Kerala', 'Tamil Nadu'],
    "Capital": ['Hyderabad', 'Mumbai', 'Bengaluru', 'Trivandrum', 'Chennai'],
    "Literacy %": [89, 77, 82, 97,85],
    "Avg High Temp(c)": [33, 30, 29, 31, 32 ]
})
print(df)

輸出: 第一步是創建一個字典。第二步是將字典作為引數傳遞給 DataFrame() 方法。最後一步是打印 DataFrame。正如您所看到的,DataFrame 可以被比作具有異構值的表格。此外,DataFrame 的大小可以被修改。我們以地圖的形式提供了資料,地圖的鍵被 Pandas 視為行標籤。索引顯示在最左邊的列中,具有行標籤。列標題和資料以表格的形式顯示。還可以創建帶索引的 DataFrame。這可以通過配置 DataFrame() 方法中的索引參數來完成。


從CSV導入數據到DataFrame

我們還可以通過導入CSV文件來創建DataFrame。 CSV文件是一個文本文件,每行包含一條數據記錄。記錄內的值使用“逗號”字符分隔。 Pandas提供了一個有用的方法,名為read_csv(),將CSV文件的內容讀取到DataFrame中。例如,我們可以創建一個名為’cities.csv’的文件,其中包含印度城市的詳細信息。 CSV文件存儲在包含Python腳本的同一目錄中。可以使用以下方法導入此文件:

import pandas as pd
data =  pd.read_csv('cities.csv')
print(data)

。我們的目標是加載數據並對其進行分析以得出結論。因此,我們可以使用任何方便的方法來加載數據。在本教程中,我們正在將DataFrame的數據硬編碼進行。


檢查DataFrame中的數據

運行 DataFrame 並以其名稱顯示整個表格。在實時情況下,要分析的數據集將擁有數千行。為了分析數據,我們需要檢查來自大量數據集的數據。 Pandas 提供了許多有用的函數,以僅檢查我們需要的數據。 我們可以使用 df.head(n) 獲取前 n 行或 df.tail(n) 來打印最後 n 行。例如,下面的代碼打印了 DataFrame 的前 2 行和最後 1 行。

print(df.head(2))

輸出:

print(df.tail(1))

輸出: 同樣,print(df.dtypes) 打印數據類型。輸出: print(df.index) 打印索引。輸出: print(df.columns) 打印 DataFrame 的列。輸出: print(df.values) 顯示表格的數值。輸出:


1. 獲取記錄的統計摘要

我們可以使用df.describe()函數來獲取數據的統計摘要(計數、平均值、標準差、最小值、最大值等)。現在,讓我們使用這個函數,來顯示“識字率 %”列的統計摘要。為此,我們可以添加以下代碼片段:

print(df['Literacy %'].describe())

輸出: df.describe()函數會顯示統計摘要,以及數據類型。


2. 排序記錄

我們可以使用df.sort_values()函數按任意列排序記錄。例如,讓我們按降序排序“識字率 %”列。

print(df.sort_values('Literacy %', ascending=False))

輸出:


3. 切片記錄

可以通過使用列名提取特定列的數據。例如,要提取“首都”列,我們使用:

df['Capital']

(df.Capital)

輸出: 也可以切片多個列。這是通過將多個列名包裹在2個方括號中完成的,列名之間用逗號分隔。以下代碼切片DataFrame的“State”和“Capital”列。

print(df[['State', 'Capital']])

輸出: 也可以切片行。可以使用“:”運算符選擇多行。下面的代碼返回前3行。

df[0:3]

輸出: Pandas庫的一個有趣功能是使用iloc[0]函數基於其行和列標籤選擇數據。很多時候,我們可能只需要分析幾列。我們也可以通過索引進行選擇,使用loc['index_one'])。例如,要選擇第二行,我們可以使用df.iloc[1,:] 。假設我們需要選擇第二列的第二個元素。這可以通過使用df.iloc[1,1]函數來完成。在這個例子中,函數df.iloc[1,1]顯示“孟買”作為輸出。


4. 數據篩選

還可以根據列值進行篩選。例如,下面的代碼篩選了具有超過90%識字率的列。

print(df[df['Literacy %']>90])

任何比较运算符都可以用于基于条件进行过滤。输出: 另一种过滤数据的方法是使用isin。以下是仅过滤两个州“卡纳塔克邦”和“泰米尔纳德邦”的代码。

print(df[df['State'].isin(['Karnataka', 'Tamil Nadu'])])

输出:


5. 重命名列

可以使用df.rename()函数来重命名列。该函数接受旧列名和新列名作为参数。例如,让我们将列名“识字率%”重命名为“识字率百分比”。

df.rename(columns = {'Literacy %':'Literacy percentage'}, inplace=True)
print(df.head())

`inplace=True`参数使更改应用于DataFrame。输出:


6. 数据整理

Data Science 涉及對數據的處理,以便數據能夠與數據算法良好配合。數據整理是處理數據的過程,例如合併、分組和連接。Pandas庫提供了有用的函數,如merge()groupby()concat(),以支持數據整理任務。讓我們創建兩個數據框並展示數據整理函數以更好地理解。

import pandas as pd

d = {  
    'Employee_id': ['1', '2', '3', '4', '5'],
    'Employee_name': ['Akshar', 'Jones', 'Kate', 'Mike', 'Tina']
}
df1 = pd.DataFrame(d, columns=['Employee_id', 'Employee_name'])  
print(df1)

輸出: 現在,讓我們使用以下代碼創建第二個數據框:

import pandas as pd

data = {  
    'Employee_id': ['4', '5', '6', '7', '8'],
    'Employee_name': ['Meera', 'Tia', 'Varsha', 'Williams', 'Ziva']
}
df2 = pd.DataFrame(data, columns=['Employee_id', 'Employee_name'])  
print(df2)

輸出:


a. Merging

現在,讓我們使用merge()函數沿著“Employee_id”值合併我們創建的兩個數據框:

print(pd.merge(df1, df2, on='Employee_id'))

輸出: 我們可以看到,merge()函數返回具有相同列值的兩個數據框的行,這是在合併時使用的列值。


b. Grouping

分組是將數據分為不同類別的過程。例如,在下面的示例中,“Employee_Name”字段兩次具有名稱“Meera”。因此,讓我們按“Employee_name”列進行分組。

import pandas as pd
import numpy as np

data = {
    'Employee_id': ['4', '5', '6', '7', '8'],
    'Employee_name': ['Meera', 'Meera', 'Varsha', 'Williams', 'Ziva']
}
df2 = pd.DataFrame(data)

group = df2.groupby('Employee_name')
print(group.get_group('Meera'))

具有值“Meera”的‘Employee_name’字段被按“Employee_name”列分組。示例輸出如下:輸出:


c. Concatenating

將數據連接在一起涉及將一組數據添加到另一組中。 Pandas提供了一個名為concat()的函數來連接數據框。例如,讓我們連接數據框df1df2,使用:

print(pd.concat([df1, df2]))

輸出:


通過傳遞系列的字典來創建數據框

要創建一個系列,我們可以使用pd.Series()方法,並將數組傳遞給它。讓我們創建一個簡單的系列如下:

series_sample = pd.Series([100, 200, 300, 400])
print(series_sample)

輸出: 我們創建了一個系列。您可以看到顯示了2列。第一列包含從0開始的索引值。第二列包含作為系列傳遞的元素。通過傳遞`Series`字典,可以創建一個由序列索引聯合並傳遞的數據框。讓我們創建一個由序列索引聯合並傳遞的數據框。例子

d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
print(df)

示例輸出 對於第一個系列,由於我們沒有指定標籤‘d’,將返回NaN。


列選擇、添加、刪除

從 DataFrame 中可以選擇特定的列。例如,要僅顯示第一列,我們可以將上面的代碼重新編寫為:

d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
 'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
print(df['Matches played'])

上面的代碼僅打印 DataFrame 的“Matches played”列。輸出 還可以將列添加到現有的 DataFrame 中。例如,下面的代碼將一個名為“Runrate”的新列添加到上面的 DataFrame 中。

d = {'Matches played' : pd.Series([400, 300, 200], index=['Sachin', 'Kohli', 'Raina']),
 'Position' : pd.Series([1, 2, 3, 4], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])}
df = pd.DataFrame(d)
df['Runrate']=pd.Series([80, 70, 60, 50], index=['Sachin', 'Kohli', 'Raina', 'Dravid'])
print(df)

輸出: 我們可以使用 `delete` 和 `pop` 函數刪除列。例如,在上面的示例中刪除“Matches played”列,可以使用以下任一方式:

del df['Matches played']

df.pop('Matches played')

輸出:


結論

在這個教程中,我們對Python Pandas庫進行了簡要介紹。我們還進行了實際的示例,以展示Pandas庫在數據科學領域的威力。我們還通過Python庫中的不同數據結構進行了介紹。參考:Pandas官方網站

Source:
https://www.digitalocean.com/community/tutorials/python-pandas-module-tutorial