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腳本中導入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()
的函數來連接數據框。例如,讓我們連接數據框df1
和df2
,使用:
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