Python?Pandas庫簡介及一些常見用法總結
一、 Pandas簡介
1. 簡介
Pandas是一個開源的Python數據分析庫,它提供了高性能、易用的數據結構和數據分析工具。Pandas的名字來源于“Panel Data”(面板數據),它主要用于處理結構化數據,例如表格數據、時間序列數據等。Pandas是在NumPy庫的基礎上構建的,它繼承了NumPy的高性能數組計算能力,并在此基礎上增加了對復雜數據操作的支持。它提供了兩種主要的數據結構:Series(一維數組)和DataFrame(二維表格),使得數據處理更加高效和便捷。
Pandas最初由Wes McKinney在2008年創(chuàng)建,目的是為了滿足金融數據分析的需求。隨著時間的推移,它已經成為Python數據分析生態(tài)系統(tǒng)中不可或缺的一部分,被廣泛應用于數據科學、機器學習、金融、統(tǒng)計等多個領域。
2. 主要特點
(一)強大的數據結構
- DataFrame:這是Pandas中最核心的數據結構之一,它是一個二維表格型數據結構,類似于Excel中的表格。DataFrame的每一列可以存儲不同類型的數據(如數字、字符串等),并且可以通過列名和行索引來訪問數據。例如,我們可以創(chuàng)建一個包含員工信息(姓名、年齡、部門等)的DataFrame,通過列名“姓名”來獲取所有員工的名字,或者通過行索引來獲取特定員工的全部信息。
- Series:Series是一個一維數組,類似于NumPy數組,但它可以帶有索引。索引可以是整數、字符串等任何哈希類型。Series在處理單列數據時非常方便,比如對一組時間序列數據(如股票價格)進行操作,可以通過日期索引來快速訪問特定時間點的價格。
(二)靈活的數據操作
- 數據清洗:Pandas提供了豐富的數據清洗功能,可以輕松處理缺失值(如填充缺失值、刪除缺失值)、重復數據(如刪除重復行)、異常值等。例如,對于一個包含缺失值的DataFrame,我們可以使用fillna()方法來填充缺失值,或者使用dropna()方法來刪除包含缺失值的行。
- 數據篩選:可以使用布爾索引、標簽索引、位置索引等多種方式對數據進行篩選。例如,我們可以通過布爾表達式df[df[‘年齡’] > 30]來篩選出年齡大于30的員工數據。
- 數據合并:Pandas支持多種數據合并操作,如concat()(用于連接多個數據結構)、merge()(類似于SQL中的JOIN操作,可以根據指定的鍵將兩個DataFrame合并在一起)和join()(基于索引進行合并)。這些功能使得在處理多個數據源時可以方便地將它們整合到一起。比如,將員工信息表和員工績效表根據員工ID進行合并。
- 數據分組與聚合:通過groupby()方法可以對數據進行分組,然后對每個分組應用聚合函數(如求和、求平均、計數等)。例如,對銷售數據按照地區(qū)分組,然后計算每個地區(qū)的總銷售額。
(三)時間序列分析支持
Pandas對時間序列數據提供了強大的支持。它可以直接解析日期時間字符串,生成時間序列索引。例如,pd.date_range(start=‘2024-01-01’, end=‘2024-12-31’, freq=‘D’)可以生成一個從2024年1月1日到2024年12月31日的每日時間序列索引。此外,Pandas還支持時間頻率的轉換(如將日數據轉換為月數據)、時間窗口計算(如計算移動平均值)等操作,這使得它在金融數據分析、氣象數據分析等涉及時間序列的領域非常有用。
(四)與其他庫的兼容性
Pandas可以無縫地與Python的其他數據分析和科學計算庫配合使用。例如,它可以與NumPy進行高效的數組操作,與Matplotlib進行數據可視化,與Scikit - learn進行機器學習模型的訓練和預測。這種良好的兼容性使得Pandas能夠融入完整的數據分析工作流中。
3.應用場景
(一)金融領域
在金融數據分析中,Pandas可以用來處理股票價格數據、交易數據等。例如,通過讀取股票價格的時間序列數據,可以計算股票的收益率、移動平均線等指標。還可以對多個股票的收益率數據進行合并,分析股票之間的相關性。此外,Pandas也可以用于風險管理,比如通過分析交易數據來識別異常交易行為。
(二)數據科學與機器學習
在數據科學項目中,Pandas是數據預處理的重要工具。數據科學家可以使用Pandas來加載數據(如從CSV文件、數據庫等來源加載)、清洗數據(處理缺失值、異常值等)、探索數據(計算描述性統(tǒng)計量、繪制數據分布圖等)。在機器學習中,Pandas可以將數據集劃分為訓練集和測試集,還可以對特征數據進行標準化、歸一化等操作,為機器學習模型的訓練做好準備。
(三)商業(yè)數據分析
商業(yè)分析師可以使用Pandas來分析銷售數據、客戶數據等。例如,通過分析銷售數據的時間序列,可以發(fā)現銷售的季節(jié)性規(guī)律;通過分析客戶數據,可以對客戶進行分群(如使用groupby()方法根據客戶消費金額分組),并計算每個客戶群的特征(如平均消費金額、購買頻率等)。這些分析結果可以幫助企業(yè)制定營銷策略、優(yōu)化產品布局等。
(四)生物醫(yī)學研究
在生物醫(yī)學領域,Pandas可以用于處理實驗數據,如基因表達數據、臨床試驗數據等。研究人員可以使用Pandas來整理數據格式、篩選特定的樣本或基因,還可以對數據進行統(tǒng)計分析,如計算基因表達的差異等。
二、Pandas庫的常見用法
1. 數據讀取
1.1 讀取CSV文件
Pandas加載CSV文件并在 Python 中以編程方式操作它。 Pandas的核心是“DataFrame”的對象類型- 本質上是一個值表,每行和每列都有一個標簽。用read_csv()方法加載CSV 文件:
import pandas as pd
# 讀取CSV文件
df = pd.read_csv('2010-2024年國家經濟運行情況.csv',encoding='utf-8')
# 顯示前5行數據
print(df.head())
1.2 讀取Excel文件
- 使用pd.read_excel()方法可以讀取Excel文件(.xls或.xlsx格式)。
import pandas as pd
# 讀取Excel文件
df = pd.read_excel('2010-2024年北京市經濟運行情況.xlsx',encoding='gbk')
# 顯示前5行數據
print(df.head())
1.3 讀取數據庫數據
- 使用pd.read_sql()方法可以從數據庫中讀取數據。
import pandas as pd
import sqlite3
# 連接到SQLite數據庫
conn = sqlite3.connect('economics_data.db')
# 從數據庫表中讀取數據
df = pd.read_sql('SELECT * FROM table_name', conn)
1.4 讀取JSON數據
- 使用pd.read_json()方法可以讀取JSON格式的文件。
import pandas as pd
df = pd.read_json("2025年北京報告數據.json", orient="records")
參數:
- orient:指定JSON文件的格式,常見的有’records’(每行是一個JSON對象)、‘split’(鍵值對分開存儲)等。
- ‘records’:JSON 是一個記錄列表,每個記錄是一個字典,這是默認值。
- ‘index’:JSON 的鍵是索引,值是列。
- ‘columns’:JSON 的鍵是列,值是索引。
- ‘values’:JSON 是一個二維數組,每一行是一個記錄。
import pandas as pd
# 示例 JSON 數據
json_data = {
"index": ["row1", "row2"],
"columns": ["col1", "col2"],
"data": [[1, 2], [3, 4]]
}
# 使用 orient='split' 讀取
df = pd.read_json(pd.io.json.dumps(json_data), orient='split')
print(df)
2. 寫入數據
2.1 寫入CSV文件
- 使用DataFrame.to_csv()方法可以將DataFrame保存為CSV文件。
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {
'name': ['Alice', 'Bob'],
'age': [25, 30]
}
df = pd.DataFrame(data)
# 將數據寫入CSV文件
# index=False表示不保存行索引
df.to_csv('output.csv', index=False)
參數說明:
- index:是否保存行索引,默認為True。
- sep:指定分隔符,默認為逗號(,)。
2.2 寫入Excel文件
- 使用DataFrame.to_excel()方法可以將DataFrame保存為Excel文件。
import pandas as pd
# 創(chuàng)建一個 DataFrame
data = {
'name': ['Alice', 'Bob', 'Gary', 'Lily'],
'age': [25, 30, 24, 26],
'Grade': [97, 76, 61, 88]
}
df = pd.DataFrame(data)
# 寫入Excel文件中
df.to_excel('exam_result.xlsx', sheet_name='Sheet1', index=False)
參數說明:
- sheet_name:指定保存的工作表名稱。
- index:是否保存行索引。
2.3 寫入數據庫
- 使用DataFrame.to_sql()方法可以將DataFrame保存到數據庫中。
import pandas as pd
from sqlalchemy import create_engine
# 創(chuàng)建一個 DataFrame
data = {
'name': ['Alice', 'Bob', 'Gary', 'Lily'],
'age': [25, 30, 24, 26],
‘gender': ['F', 'M', 'M', 'F'],
'Grade': [97, 76, 61, 88]
}
df = pd.DataFrame(data)
# 創(chuàng)建sqlalchemy的數據庫連接
conn = create_engine('mysql+pymysql://root:123456@localhost:3306/exam_db?charset=utf8')
# 寫入數據庫中
df.to_sql('exam_result', conn, if_exists='replace', index=False)
參數說明:
- 第一個參數是目標數據庫表的名稱。
- conn是數據庫連接對象, 必須是sqlalchemy的數據庫連接。
- if_exists:指定如果表已存在時的行為,可選值為’fail’(拋出錯誤)、‘replace’(替換表)、‘append’(追加數據)。
index:是否將行索引作為一列保存到數據庫中。
3. 數據清洗
3.1 處理缺失值
(1)檢查缺失值
- 使用isnull()或isna()方法可以檢查數據中的缺失值。
# 返回一個布爾型DataFrame,缺失值為True print(df.isnull()) # 統(tǒng)計每列的缺失值數量 print(df.isnull().sum())
(2)填充缺失值
- 使用fillna()方法可以填充缺失值。
# 將所有缺失值填充為0 df.fillna(value=0, inplace=True) # 用列的均值填充該列的缺失值 df['列名'].fillna(value=df['列名'].mean(), inplace=True)
(3)刪除缺失值
- 使用dropna()方法可以刪除包含缺失值的行或列。
# 刪除包含缺失值的行 df.dropna(inplace=True) # 刪除包含缺失值的列 df.dropna(axis=1, inplace=True)
3.2 處理重復數據
(1)檢查重復數據
- 使用duplicated()方法可以檢查重復行。
# 返回布爾型Series,重復行為True print(df.duplicated()) # 統(tǒng)計重復行的數量 print(df.duplicated().sum())
(2)刪除重復數據
- 使用drop_duplicates()方法可以刪除重復行。
# 刪除重復行 df.drop_duplicates(inplace=True)
3.3 數據類型轉換
- 使用astype()方法可以將列的數據類型轉換為指定類型。
# 將列轉換為整數類型
df['列名'] = df['列名'].astype('int')
# 將列轉換為浮點數類型
df['列名'] = df['列名'].astype('float')
# 將列轉換為字符串類型
df['列名'] = df['列名'].astype('str')
3.4 重命名列名
- 使用rename()方法可以重命名列名。
- 用法:
df.rename(columns={‘舊列名1’: ‘新列名1’, ‘舊列名2’: ‘新列名2’}, inplace=True)
stock_data_frame = pd.DataFrame(stock_data).rename(
columns={
0: 'SECURITY_CODE',
1: 'SECURITY_NAME',
2: 'LATEST_PRICE',
3: 'PRICES_CHANGE_RATIO',
4: 'PRICES_CHANGE',
5: 'TRADING_COUNT',
6: 'TRADING_VALUE',
7: 'AMPLITUDE',
8: 'TURN_OVER_RATIO',
9: 'PE_RATIO',
10: 'TRADE_RATIO',
11: 'MAX_PRICE',
12: 'MIN_PRICE',
13: 'OPEN_PRICE',
14: 'PRE_CLOSE_PRICE',
15: 'TOTAL_MARKET_VALUE',
16: 'CIRCULATION_MARKET_VALUE',
17: 'PB_RATIO',
18: 'PE_RATIO_TTM',
19: 'UPWARD_RATE',
20: 'MONTH_CHANGE_RATIO',
21: 'YEAR_CHANGE_RATIO',
22: 'INFLOW_FUNDS'
}
)
示例:當前我們有一個包含缺失值和重復值的國家經濟運行情況CSV文件,需要進一步清洗數據以便后續(xù)分析。
import pandas as pd
# 讀取數據
data = pd.read_csv('2010-2024年國家經濟運行情況.csv',encoding='utf-8')
# 顯示前五行數據
print(data.head())
# 處理缺失值
# 處理1:刪除含有缺失值的行
data = data.dropna()
# 處理方式2:將缺失值填充為0
data = data.fillna(0)
# 移除重復值
data = data.drop_duplicates()
# 顯示處理后數據的前5條
print(data.head())
4. 數據查看與統(tǒng)計
4.1 查看數據結構
(1)查看DataFrame的前幾行
- 使用head()方法可以查看DataFrame的前幾行,默認顯示前5行。
# 查看前5行 print(df.head()) # 查看前10行 print(df.head(10))
(2)查看DataFrame的后幾行
- 使用tail()方法可以查看DataFrame的后幾行,默認顯示后5行。
# 查看后5行 print(df.tail()) # 查看后10行 print(df.tail(10))
(3)查看DataFrame的行列數(形狀)
- 使用shape屬性可以獲取DataFrame的形狀(行數和列數)。
# 輸出行數與列數 print(df.shape)
(4)查看DataFrame的列名
- 使用columns屬性可以獲取DataFrame的列名。
# 輸出列名 print(df.columns)
(5)查看DataFrame的數據類型
- 使用dtypes屬性可以查看每列的數據類型。
# 輸出列的數據類型 print(df.dbtypes)
4.2 數據統(tǒng)計
(1)描述性統(tǒng)計
- 使用**describe()**方法可以獲取DataFrame的描述性統(tǒng)計信息,包括均值、標準差、最小值、四分位數等。
# 默認只對數值列進行統(tǒng)計 print(df.describe()) # 對所有列進行統(tǒng)計 print(df.describe(include='all'))
(2)特定統(tǒng)計量計算
- 可以使用mean()、median()、std()、sum()、count()等方法計算特定的統(tǒng)計量。
- mean() : 統(tǒng)計均值
- median(): 統(tǒng)計中位數
- std(): 統(tǒng)計標準差
- sum(): 數據求和統(tǒng)計
- count(): 統(tǒng)計數量
# 計算某一列的均值 df['列名'].mean() # 計算某一列的總和 df['列名'].sum()
(3)計算相關系數
- 使用**corr()**方法可以計算DataFrame中數值列之間的相關系數。
# 輸出相關系數矩陣 print(df.corr())
- 示例:
import pandas as pd
import numpy as np
# 創(chuàng)建一個示例 DataFrame
data = {
'A': np.random.randn(100), # 隨機生成100個標準正態(tài)分布的數
'B': np.random.rand(100), # 隨機生成100個在[0,1)區(qū)間均勻分布的數
'C': np.random.randint(0, 100, 100), # 隨機生成10個[0,10)之間的整數
'D': np.random.randn(100) # 隨機生成100個標準正態(tài)分布的數
}
df = pd.DataFrame(data)
# 計算 DataFrame 中所有數值型列的相關系數
correlation_matrix = df.corr()
print("Correlation Matrix:")
print(correlation_matrix)
(4)計算數據分布
- 使用value_counts()方法可以統(tǒng)計某一列中各個值的出現次數。
# 統(tǒng)計某一列中各個值的出現次數 print(df['列名'].value_counts())
5. 數據篩選與過濾
5.1 通過布爾表達式篩選
- Pandas支持使用布爾表達式可以對DataFrame進行篩選。
# 篩選某一列大于10的行 filtered_df = df[df['列名'] > 10] # 使用多個條件進行篩選 filtered_df = df[(df['列名1'] > 10) & (df['列名2'] < 20)]
- 示例:根據條件篩選股票
# 條件選股邏輯:
# - 量比 > 1
# - 換手率 ≥5%且≤10%
# - 振幅 ≥3%且≤10%
# - 流通市值 ≥50億且≤200億
# - 動態(tài)市盈率>0且<= 30(行業(yè)均值×1.5)
# - 資金流 > 500萬
filtered = stock_data_frame[
# 量比 > 1
(stock_data_frame['TRADE_RATIO'] > 100) &
# 換手率在5%至10%區(qū)間
(stock_data_frame['TURN_OVER_RATIO'] >= 500) &
(stock_data_frame['TURN_OVER_RATIO'] <= 1000) &
# 振幅在3%至10%區(qū)間
(stock_data_frame['AMPLITUDE'] >= 300) &
(stock_data_frame['AMPLITUDE'] <= 1000) &
# 流通市值在50億元至200億元區(qū)間
(stock_data_frame['CIRCULATION_MARKET_VALUE'] >= 5000000000) &
(stock_data_frame['CIRCULATION_MARKET_VALUE'] <= 20000000000) &
# 動態(tài)市盈率在0至40之間
(stock_data_frame['PE_RATIO'] > 0) &
(stock_data_frame['PE_RATIO'] <= 4000) &
# 股票收盤價在30元以內
(stock_data_frame['LATEST_PRICE'] <= 3000) &
# 當日資金流入大于500萬
(stock_data_frame['INFLOW_FUNDS'] > 5000000)
]
5.2 按索引篩選
- Pandas中使用loc()和iloc()可以按索引進行篩選。
- loc:基于標簽索引,可以同時指定行和列。
- iloc:基于位置索引,只能指定行和列的位置。
# 使用loc # 選擇第2到第5行,指定列名 selected_df = df.loc[df.index[1:5], ['列名1', '列名2']] # 使用iloc # 選擇第2到第5行,第1和第2列 selected_df = df.iloc[1:5, [0, 1]]
5.3 按列名篩選
- Pandas中可以通過列名直接選擇列。
# 選擇單列 selected_column = df['列名'] # 選擇多列 selected_columns = df[['列名1', '列名2']]
6. 數據轉換與處理
6.1 數據排序
(1)按列值排序
- 使用sort_values()方法可以按列值對DataFrame進行排序。
# 按某一列升序排序 df.sort_values(by='列名', ascending=True, inplace=True) # 按多列排序 df.sort_values(by=['列名1', '列名2'], ascending=[True, False], inplace=True)
(2)按索引排序
- 使用sort_index()方法可以按索引對DataFrame進行排序。
# 按索引排序 df.sort_index(inplace=True)
6.2 數據分組與聚合
(1)數據分組
- Pandas中使用groupby()方法可以對數據進行分組。
# 按某一列分組
grouped = df.groupby('列名')
# 按多列分組
grouped = df.groupby(['列名1', '列名2'])
(2)數據聚合
- Pandas中使用聚合函數(如sum()、mean()、count()等)對分組后的數據進行計算。
# 對分組后的數據求和
result = grouped.sum()
# 對分組后的數據求均值
result = grouped.mean()
# 對不同列應用不同的聚合函數
result = grouped.agg({'列名1': 'sum', '列名2': 'mean'})
6.3 數據透視表
(1)數據重塑
- Pandas中使用pivot()用于將長格式數據轉換為寬格式。
import pandas as pd
import numpy as np
# 創(chuàng)建示例數據
data = {
'日期': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
'變量': ['A', 'B', 'A', 'B'],
'值': [10, 20, 30, 40]
}
df = pd.DataFrame(data)
# 使用pivot進行重塑
pivot_df = df.pivot(index='日期', columns='變量', values='值')
print("Pivot結果:\n", pivot_df)
輸出:

參數說明:
- index: 指定作為行索引的列
- columns: 指定作為列名的列
- values: 指定填充值的列
(2)數據透視
- Pandas中使用pivot_table()方法可以創(chuàng)建數據透視表。
pivot_table = df.pivot_table(index='列名1', columns='列名2', values='列名3', aggfunc='sum')
# 創(chuàng)建有重復值的數據
data = {
'日期': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02'],
'變量': ['A', 'B', 'A', 'B'],
'值': [10, 20, 30, 40]
}
df = pd.DataFrame(data)
# 使用pivot_table進行聚合
pivot_table_df = pd.pivot_table(df, values='值', index='日期', columns='變量', aggfunc=np.mean)
print("\nPivot Table結果:\n", pivot_table_df)
輸出:

參數說明:
- aggfunc: 指定聚合函數,默認為np.mean
- 可以處理重復值,對相同索引和列的組合進行聚合
7. 數據合并與連接
7.1 數據合并
- Pandas中使用merge()方法可以將兩個DataFrame按指定的鍵合并,類似于SQL中的JOIN操作。
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]})
# 內連接合并
merged_df = pd.merge(df1, df2, on='key', how='inner')
# 外連接合并
merged_df = pd.merge(df1, df2, on='key', how='outer')
# 左連接合并
merged_df = pd.merge(df1, df2, on='key', how='left')
# 右連接合并
merged_df = pd.merge(df1, df2, on='key', how='right')
輸出結果:

7.2 數據連接
- Pandas中使用concat()方法可以將多個DataFrame按行或列連接。
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
# 按行連接
concatenated_df = pd.concat([df1, df2], axis=0)
# 按列連接
concatenated_df = pd.concat([df1, df2], axis=1)
輸出結果:

8. 時間序列數據處理
8.1 創(chuàng)建時間序列
- 使用pd.date_range()可以創(chuàng)建時間序列索引。
# 每日時間序列
date_range = pd.date_range(start='2024-01-01', end='2024-12-31', freq='D')
# 創(chuàng)建一個時間序列DataFrame
df = pd.DataFrame({'value': range(len(date_range))}, index=date_range)
8.2 時間頻率轉換
- 使用resample()方法可以對時間序列數據進行頻率轉換。
# 將日數據轉換為月數據,并求和
monthly_df = df.resample('M').sum()
8.3 時間窗口計算
- 使用rolling()方法可以對時間序列數據進行窗口計算(如移動平均)。
# 計算7天移動平均值 df['moving_avg'] = df['value'].rolling(window=7).mean()
在股票行情計算時,可使用rolling()方法計算MA移動平均線。
# 計算移動平均線 stock_data['ma5'] = stock_data['close'].rolling(5).mean() stock_data['ma10'] = stock_data['close'].rolling(10).mean() stock_data['ma20'] = stock_data['close'].rolling(20).mean()
總結
到此這篇關于Python Pandas庫簡介及一些常見用法的文章就介紹到這了,更多相關Python Pandas庫用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python編寫學生成績管理系統(tǒng)的邏輯結構及功能實現
這篇文章主要為大家介紹了python編寫學生成績管理系統(tǒng)實現八個功能示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
Scrapy-Redis之RedisSpider與RedisCrawlSpider詳解
這篇文章主要介紹了Scrapy-Redis之RedisSpider與RedisCrawlSpider詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11

