Python?Pandas庫簡介及一些常見用法總結(jié)
一、 Pandas簡介
1. 簡介
Pandas是一個開源的Python數(shù)據(jù)分析庫,它提供了高性能、易用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。Pandas的名字來源于“Panel Data”(面板數(shù)據(jù)),它主要用于處理結(jié)構(gòu)化數(shù)據(jù),例如表格數(shù)據(jù)、時間序列數(shù)據(jù)等。Pandas是在NumPy庫的基礎上構(gòu)建的,它繼承了NumPy的高性能數(shù)組計算能力,并在此基礎上增加了對復雜數(shù)據(jù)操作的支持。它提供了兩種主要的數(shù)據(jù)結(jié)構(gòu):Series(一維數(shù)組)和DataFrame(二維表格),使得數(shù)據(jù)處理更加高效和便捷。
Pandas最初由Wes McKinney在2008年創(chuàng)建,目的是為了滿足金融數(shù)據(jù)分析的需求。隨著時間的推移,它已經(jīng)成為Python數(shù)據(jù)分析生態(tài)系統(tǒng)中不可或缺的一部分,被廣泛應用于數(shù)據(jù)科學、機器學習、金融、統(tǒng)計等多個領域。
2. 主要特點
(一)強大的數(shù)據(jù)結(jié)構(gòu)
- DataFrame:這是Pandas中最核心的數(shù)據(jù)結(jié)構(gòu)之一,它是一個二維表格型數(shù)據(jù)結(jié)構(gòu),類似于Excel中的表格。DataFrame的每一列可以存儲不同類型的數(shù)據(jù)(如數(shù)字、字符串等),并且可以通過列名和行索引來訪問數(shù)據(jù)。例如,我們可以創(chuàng)建一個包含員工信息(姓名、年齡、部門等)的DataFrame,通過列名“姓名”來獲取所有員工的名字,或者通過行索引來獲取特定員工的全部信息。
- Series:Series是一個一維數(shù)組,類似于NumPy數(shù)組,但它可以帶有索引。索引可以是整數(shù)、字符串等任何哈希類型。Series在處理單列數(shù)據(jù)時非常方便,比如對一組時間序列數(shù)據(jù)(如股票價格)進行操作,可以通過日期索引來快速訪問特定時間點的價格。
(二)靈活的數(shù)據(jù)操作
- 數(shù)據(jù)清洗:Pandas提供了豐富的數(shù)據(jù)清洗功能,可以輕松處理缺失值(如填充缺失值、刪除缺失值)、重復數(shù)據(jù)(如刪除重復行)、異常值等。例如,對于一個包含缺失值的DataFrame,我們可以使用fillna()方法來填充缺失值,或者使用dropna()方法來刪除包含缺失值的行。
- 數(shù)據(jù)篩選:可以使用布爾索引、標簽索引、位置索引等多種方式對數(shù)據(jù)進行篩選。例如,我們可以通過布爾表達式df[df[‘年齡’] > 30]來篩選出年齡大于30的員工數(shù)據(jù)。
- 數(shù)據(jù)合并:Pandas支持多種數(shù)據(jù)合并操作,如concat()(用于連接多個數(shù)據(jù)結(jié)構(gòu))、merge()(類似于SQL中的JOIN操作,可以根據(jù)指定的鍵將兩個DataFrame合并在一起)和join()(基于索引進行合并)。這些功能使得在處理多個數(shù)據(jù)源時可以方便地將它們整合到一起。比如,將員工信息表和員工績效表根據(jù)員工ID進行合并。
- 數(shù)據(jù)分組與聚合:通過groupby()方法可以對數(shù)據(jù)進行分組,然后對每個分組應用聚合函數(shù)(如求和、求平均、計數(shù)等)。例如,對銷售數(shù)據(jù)按照地區(qū)分組,然后計算每個地區(qū)的總銷售額。
(三)時間序列分析支持
Pandas對時間序列數(shù)據(jù)提供了強大的支持。它可以直接解析日期時間字符串,生成時間序列索引。例如,pd.date_range(start=‘2024-01-01’, end=‘2024-12-31’, freq=‘D’)可以生成一個從2024年1月1日到2024年12月31日的每日時間序列索引。此外,Pandas還支持時間頻率的轉(zhuǎn)換(如將日數(shù)據(jù)轉(zhuǎn)換為月數(shù)據(jù))、時間窗口計算(如計算移動平均值)等操作,這使得它在金融數(shù)據(jù)分析、氣象數(shù)據(jù)分析等涉及時間序列的領域非常有用。
(四)與其他庫的兼容性
Pandas可以無縫地與Python的其他數(shù)據(jù)分析和科學計算庫配合使用。例如,它可以與NumPy進行高效的數(shù)組操作,與Matplotlib進行數(shù)據(jù)可視化,與Scikit - learn進行機器學習模型的訓練和預測。這種良好的兼容性使得Pandas能夠融入完整的數(shù)據(jù)分析工作流中。
3.應用場景
(一)金融領域
在金融數(shù)據(jù)分析中,Pandas可以用來處理股票價格數(shù)據(jù)、交易數(shù)據(jù)等。例如,通過讀取股票價格的時間序列數(shù)據(jù),可以計算股票的收益率、移動平均線等指標。還可以對多個股票的收益率數(shù)據(jù)進行合并,分析股票之間的相關性。此外,Pandas也可以用于風險管理,比如通過分析交易數(shù)據(jù)來識別異常交易行為。
(二)數(shù)據(jù)科學與機器學習
在數(shù)據(jù)科學項目中,Pandas是數(shù)據(jù)預處理的重要工具。數(shù)據(jù)科學家可以使用Pandas來加載數(shù)據(jù)(如從CSV文件、數(shù)據(jù)庫等來源加載)、清洗數(shù)據(jù)(處理缺失值、異常值等)、探索數(shù)據(jù)(計算描述性統(tǒng)計量、繪制數(shù)據(jù)分布圖等)。在機器學習中,Pandas可以將數(shù)據(jù)集劃分為訓練集和測試集,還可以對特征數(shù)據(jù)進行標準化、歸一化等操作,為機器學習模型的訓練做好準備。
(三)商業(yè)數(shù)據(jù)分析
商業(yè)分析師可以使用Pandas來分析銷售數(shù)據(jù)、客戶數(shù)據(jù)等。例如,通過分析銷售數(shù)據(jù)的時間序列,可以發(fā)現(xiàn)銷售的季節(jié)性規(guī)律;通過分析客戶數(shù)據(jù),可以對客戶進行分群(如使用groupby()方法根據(jù)客戶消費金額分組),并計算每個客戶群的特征(如平均消費金額、購買頻率等)。這些分析結(jié)果可以幫助企業(yè)制定營銷策略、優(yōu)化產(chǎn)品布局等。
(四)生物醫(yī)學研究
在生物醫(yī)學領域,Pandas可以用于處理實驗數(shù)據(jù),如基因表達數(shù)據(jù)、臨床試驗數(shù)據(jù)等。研究人員可以使用Pandas來整理數(shù)據(jù)格式、篩選特定的樣本或基因,還可以對數(shù)據(jù)進行統(tǒng)計分析,如計算基因表達的差異等。
二、Pandas庫的常見用法
1. 數(shù)據(jù)讀取
1.1 讀取CSV文件
Pandas加載CSV文件并在 Python 中以編程方式操作它。 Pandas的核心是“DataFrame”的對象類型- 本質(zhì)上是一個值表,每行和每列都有一個標簽。用read_csv()方法加載CSV 文件:
import pandas as pd # 讀取CSV文件 df = pd.read_csv('2010-2024年國家經(jīng)濟運行情況.csv',encoding='utf-8') # 顯示前5行數(shù)據(jù) print(df.head())
1.2 讀取Excel文件
- 使用pd.read_excel()方法可以讀取Excel文件(.xls或.xlsx格式)。
import pandas as pd # 讀取Excel文件 df = pd.read_excel('2010-2024年北京市經(jīng)濟運行情況.xlsx',encoding='gbk') # 顯示前5行數(shù)據(jù) print(df.head())
1.3 讀取數(shù)據(jù)庫數(shù)據(jù)
- 使用pd.read_sql()方法可以從數(shù)據(jù)庫中讀取數(shù)據(jù)。
import pandas as pd import sqlite3 # 連接到SQLite數(shù)據(jù)庫 conn = sqlite3.connect('economics_data.db') # 從數(shù)據(jù)庫表中讀取數(shù)據(jù) df = pd.read_sql('SELECT * FROM table_name', conn)
1.4 讀取JSON數(shù)據(jù)
- 使用pd.read_json()方法可以讀取JSON格式的文件。
import pandas as pd df = pd.read_json("2025年北京報告數(shù)據(jù).json", orient="records")
參數(shù):
- orient:指定JSON文件的格式,常見的有’records’(每行是一個JSON對象)、‘split’(鍵值對分開存儲)等。
- ‘records’:JSON 是一個記錄列表,每個記錄是一個字典,這是默認值。
- ‘index’:JSON 的鍵是索引,值是列。
- ‘columns’:JSON 的鍵是列,值是索引。
- ‘values’:JSON 是一個二維數(shù)組,每一行是一個記錄。
import pandas as pd # 示例 JSON 數(shù)據(jù) 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. 寫入數(shù)據(jù)
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) # 將數(shù)據(jù)寫入CSV文件 # index=False表示不保存行索引 df.to_csv('output.csv', index=False)
參數(shù)說明:
- 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)
參數(shù)說明:
- sheet_name:指定保存的工作表名稱。
- index:是否保存行索引。
2.3 寫入數(shù)據(jù)庫
- 使用DataFrame.to_sql()方法可以將DataFrame保存到數(shù)據(jù)庫中。
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的數(shù)據(jù)庫連接 conn = create_engine('mysql+pymysql://root:123456@localhost:3306/exam_db?charset=utf8') # 寫入數(shù)據(jù)庫中 df.to_sql('exam_result', conn, if_exists='replace', index=False)
參數(shù)說明:
- 第一個參數(shù)是目標數(shù)據(jù)庫表的名稱。
- conn是數(shù)據(jù)庫連接對象, 必須是sqlalchemy的數(shù)據(jù)庫連接。
- if_exists:指定如果表已存在時的行為,可選值為’fail’(拋出錯誤)、‘replace’(替換表)、‘append’(追加數(shù)據(jù))。
index:是否將行索引作為一列保存到數(shù)據(jù)庫中。
3. 數(shù)據(jù)清洗
3.1 處理缺失值
(1)檢查缺失值
- 使用isnull()或isna()方法可以檢查數(shù)據(jù)中的缺失值。
# 返回一個布爾型DataFrame,缺失值為True print(df.isnull()) # 統(tǒng)計每列的缺失值數(shù)量 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 處理重復數(shù)據(jù)
(1)檢查重復數(shù)據(jù)
- 使用duplicated()方法可以檢查重復行。
# 返回布爾型Series,重復行為True print(df.duplicated()) # 統(tǒng)計重復行的數(shù)量 print(df.duplicated().sum())
(2)刪除重復數(shù)據(jù)
- 使用drop_duplicates()方法可以刪除重復行。
# 刪除重復行 df.drop_duplicates(inplace=True)
3.3 數(shù)據(jù)類型轉(zhuǎn)換
- 使用astype()方法可以將列的數(shù)據(jù)類型轉(zhuǎn)換為指定類型。
# 將列轉(zhuǎn)換為整數(shù)類型 df['列名'] = df['列名'].astype('int') # 將列轉(zhuǎn)換為浮點數(shù)類型 df['列名'] = df['列名'].astype('float') # 將列轉(zhuǎn)換為字符串類型 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' } )
示例:當前我們有一個包含缺失值和重復值的國家經(jīng)濟運行情況CSV文件,需要進一步清洗數(shù)據(jù)以便后續(xù)分析。
import pandas as pd # 讀取數(shù)據(jù) data = pd.read_csv('2010-2024年國家經(jīng)濟運行情況.csv',encoding='utf-8') # 顯示前五行數(shù)據(jù) print(data.head()) # 處理缺失值 # 處理1:刪除含有缺失值的行 data = data.dropna() # 處理方式2:將缺失值填充為0 data = data.fillna(0) # 移除重復值 data = data.drop_duplicates() # 顯示處理后數(shù)據(jù)的前5條 print(data.head())
4. 數(shù)據(jù)查看與統(tǒng)計
4.1 查看數(shù)據(jù)結(jié)構(gòu)
(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的行列數(shù)(形狀)
- 使用shape屬性可以獲取DataFrame的形狀(行數(shù)和列數(shù))。
# 輸出行數(shù)與列數(shù) print(df.shape)
(4)查看DataFrame的列名
- 使用columns屬性可以獲取DataFrame的列名。
# 輸出列名 print(df.columns)
(5)查看DataFrame的數(shù)據(jù)類型
- 使用dtypes屬性可以查看每列的數(shù)據(jù)類型。
# 輸出列的數(shù)據(jù)類型 print(df.dbtypes)
4.2 數(shù)據(jù)統(tǒng)計
(1)描述性統(tǒng)計
- 使用**describe()**方法可以獲取DataFrame的描述性統(tǒng)計信息,包括均值、標準差、最小值、四分位數(shù)等。
# 默認只對數(shù)值列進行統(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)計中位數(shù)
- std(): 統(tǒng)計標準差
- sum(): 數(shù)據(jù)求和統(tǒng)計
- count(): 統(tǒng)計數(shù)量
# 計算某一列的均值 df['列名'].mean() # 計算某一列的總和 df['列名'].sum()
(3)計算相關系數(shù)
- 使用**corr()**方法可以計算DataFrame中數(shù)值列之間的相關系數(shù)。
# 輸出相關系數(shù)矩陣 print(df.corr())
- 示例:
import pandas as pd import numpy as np # 創(chuàng)建一個示例 DataFrame data = { 'A': np.random.randn(100), # 隨機生成100個標準正態(tài)分布的數(shù) 'B': np.random.rand(100), # 隨機生成100個在[0,1)區(qū)間均勻分布的數(shù) 'C': np.random.randint(0, 100, 100), # 隨機生成10個[0,10)之間的整數(shù) 'D': np.random.randn(100) # 隨機生成100個標準正態(tài)分布的數(shù) } df = pd.DataFrame(data) # 計算 DataFrame 中所有數(shù)值型列的相關系數(shù) correlation_matrix = df.corr() print("Correlation Matrix:") print(correlation_matrix)
(4)計算數(shù)據(jù)分布
- 使用value_counts()方法可以統(tǒng)計某一列中各個值的出現(xiàn)次數(shù)。
# 統(tǒng)計某一列中各個值的出現(xiàn)次數(shù) print(df['列名'].value_counts())
5. 數(shù)據(jù)篩選與過濾
5.1 通過布爾表達式篩選
- Pandas支持使用布爾表達式可以對DataFrame進行篩選。
# 篩選某一列大于10的行 filtered_df = df[df['列名'] > 10] # 使用多個條件進行篩選 filtered_df = df[(df['列名1'] > 10) & (df['列名2'] < 20)]
- 示例:根據(jù)條件篩選股票
# 條件選股邏輯: # - 量比 > 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元以內(nèi) (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. 數(shù)據(jù)轉(zhuǎn)換與處理
6.1 數(shù)據(jù)排序
(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 數(shù)據(jù)分組與聚合
(1)數(shù)據(jù)分組
- Pandas中使用groupby()方法可以對數(shù)據(jù)進行分組。
# 按某一列分組 grouped = df.groupby('列名') # 按多列分組 grouped = df.groupby(['列名1', '列名2'])
(2)數(shù)據(jù)聚合
- Pandas中使用聚合函數(shù)(如sum()、mean()、count()等)對分組后的數(shù)據(jù)進行計算。
# 對分組后的數(shù)據(jù)求和 result = grouped.sum() # 對分組后的數(shù)據(jù)求均值 result = grouped.mean() # 對不同列應用不同的聚合函數(shù) result = grouped.agg({'列名1': 'sum', '列名2': 'mean'})
6.3 數(shù)據(jù)透視表
(1)數(shù)據(jù)重塑
- Pandas中使用pivot()用于將長格式數(shù)據(jù)轉(zhuǎn)換為寬格式。
import pandas as pd import numpy as np # 創(chuàng)建示例數(shù)據(jù) 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結(jié)果:\n", pivot_df)
輸出:
參數(shù)說明:
- index: 指定作為行索引的列
- columns: 指定作為列名的列
- values: 指定填充值的列
(2)數(shù)據(jù)透視
- Pandas中使用pivot_table()方法可以創(chuàng)建數(shù)據(jù)透視表。
pivot_table = df.pivot_table(index='列名1', columns='列名2', values='列名3', aggfunc='sum')
# 創(chuàng)建有重復值的數(shù)據(jù) 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結(jié)果:\n", pivot_table_df)
輸出:
參數(shù)說明:
- aggfunc: 指定聚合函數(shù),默認為np.mean
- 可以處理重復值,對相同索引和列的組合進行聚合
7. 數(shù)據(jù)合并與連接
7.1 數(shù)據(jù)合并
- 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]}) # 內(nèi)連接合并 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')
輸出結(jié)果:
7.2 數(shù)據(jù)連接
- 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)
輸出結(jié)果:
8. 時間序列數(shù)據(jù)處理
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 時間頻率轉(zhuǎn)換
- 使用resample()方法可以對時間序列數(shù)據(jù)進行頻率轉(zhuǎn)換。
# 將日數(shù)據(jù)轉(zhuǎn)換為月數(shù)據(jù),并求和 monthly_df = df.resample('M').sum()
8.3 時間窗口計算
- 使用rolling()方法可以對時間序列數(shù)據(jù)進行窗口計算(如移動平均)。
# 計算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()
總結(jié)
到此這篇關于Python Pandas庫簡介及一些常見用法的文章就介紹到這了,更多相關Python Pandas庫用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python實現(xiàn)跨平臺桌面應用程序開發(fā)的完整指南
在當今軟件開發(fā)領域,跨平臺應用程序開發(fā)變得越來越重要,下面我們就來探討使用Python進行跨平臺桌面應用程序開發(fā)的主要框架,工具和最佳實踐吧2025-04-04python編寫學生成績管理系統(tǒng)的邏輯結(jié)構(gòu)及功能實現(xiàn)
這篇文章主要為大家介紹了python編寫學生成績管理系統(tǒng)實現(xiàn)八個功能示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04基于Python實現(xiàn)下載網(wǎng)易音樂代碼實例
這篇文章主要介紹了基于Python實現(xiàn)下載網(wǎng)易音樂代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08Scrapy-Redis之RedisSpider與RedisCrawlSpider詳解
這篇文章主要介紹了Scrapy-Redis之RedisSpider與RedisCrawlSpider詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11