一文詳解Python Pandas中67個(gè)最常用的數(shù)據(jù)處理函數(shù)
Pandas 是 Python 中最強(qiáng)大的數(shù)據(jù)處理庫(kù)之一,無論是數(shù)據(jù)分析、清洗還是可視化,都離不開它。本文整理了 67 個(gè)最常用的 Pandas 函數(shù),涵蓋了從數(shù)據(jù)導(dǎo)入、查看、清洗、選擇、排序、聚合到合并的全過程。建議收藏,隨時(shí)查閱!
1. 創(chuàng)建與導(dǎo)入數(shù)據(jù) (Creating & Loading Data)
數(shù)據(jù)分析的第一步通常是將數(shù)據(jù)加載到 DataFrame 中。
import pandas as pd
# 自己創(chuàng)建數(shù)據(jù)框,用于練習(xí)
pd.DataFrame()
# 從 CSV 文件導(dǎo)入數(shù)據(jù)
pd.read_csv('filename.csv')
# 從限定分隔符的文本文件導(dǎo)入數(shù)據(jù)
pd.read_table('filename.txt')
# 從 Excel 文件導(dǎo)入數(shù)據(jù)
pd.read_excel('filename.xlsx')
# 從 SQL 表/庫(kù)導(dǎo)入數(shù)據(jù)
pd.read_sql(query, connection_object)
# 從 JSON 格式的字符串導(dǎo)入數(shù)據(jù)
pd.read_json(json_string)
# 解析 URL、字符串或者 HTML 文件,抽取其中的 tables 表格
pd.read_html(url)
2. 導(dǎo)出數(shù)據(jù) (Exporting Data)
處理完數(shù)據(jù)后,我們通常需要將其保存為各種格式。
# 導(dǎo)出數(shù)據(jù)到 CSV 文件
df.to_csv('filename.csv')
# 導(dǎo)出數(shù)據(jù)到 Excel 文件
df.to_excel('filename.xlsx')
# 導(dǎo)出數(shù)據(jù)到 SQL 表
df.to_sql(table_name, connection_object)
# 以 Json 格式導(dǎo)出數(shù)據(jù)到文本文件
df.to_json('filename.json')
# 將多個(gè)數(shù)據(jù)幀寫入同一個(gè)工作簿的多個(gè) sheet (工作表)
writer = pd.ExcelWriter('test.xlsx', index=False)
df1.to_excel(writer, sheet_name='單位')
writer.save() # 注意:在較新版本 Pandas 中,推薦使用 with pd.ExcelWriter(...) as writer: 語法
3. 查看與檢查數(shù)據(jù) (Inspecting Data)
在進(jìn)行復(fù)雜操作前,先了解數(shù)據(jù)的基本結(jié)構(gòu)和概況。
# 查看 DataFrame 對(duì)象的前 n 行 df.head(n) # 查看 DataFrame 對(duì)象的最后 n 行 df.tail(n) # 查看行數(shù)和列數(shù) df.shape # 查看索引、數(shù)據(jù)類型和內(nèi)存信息 df.info() # 查看字段(首行)名稱 df.columns # 查看數(shù)值型列的匯總統(tǒng)計(jì) df.describe() # 查看 Series 對(duì)象的唯一值和計(jì)數(shù) s.value_counts(dropna=False) # 查看 DataFrame 對(duì)象中每一列的唯一值和計(jì)數(shù) df.apply(pd.Series.value_counts) # 查看是否有缺失值 df.isnull().any() # 查看 column_name 字段數(shù)據(jù)重復(fù)的數(shù)據(jù)信息 df[df['column_name'].duplicated()] # 查看 column_name 字段數(shù)據(jù)重復(fù)的個(gè)數(shù) df[df['column_name'].duplicated()].count()
4. 數(shù)據(jù)選擇與索引 (Selecting & Indexing)
靈活地選取我們需要的數(shù)據(jù)子集。
# 根據(jù)列名,并以 Series 的形式返回列 df['col'] # 以 DataFrame 形式返回多列 df[['col1', 'col2']] # 按位置選取數(shù)據(jù) (Series) s.iloc[0] # 按索引選取數(shù)據(jù) (Series) s.loc['index_one'] # 返回第一行 df.iloc[0, :] # 返回第一列的第一個(gè)元素 df.iloc[0, 0] # 返回第一行(索引為默認(rèn)的數(shù)字時(shí),用法同 df.iloc),但需要注意的是 loc 是按索引, iloc 參數(shù)只接受數(shù)字參數(shù) df.loc[0, :] # 【已棄用】返回字段為 col1 和 col2 的前 5 條數(shù)據(jù) # 注意:.ix 在新版 Pandas 中已被移除,請(qǐng)使用 .loc 或 .iloc # df.ix[[:5], ["col1", "col2"]] # 選擇索引名稱為 5,字段名稱為 col1 的數(shù)據(jù) df.at[5, "col1"] # 選擇索引排序?yàn)?5,字段排序?yàn)?0 的數(shù)據(jù) df.iat[5, 0]
5. 數(shù)據(jù)清洗與轉(zhuǎn)換 (Cleaning & Transforming)
數(shù)據(jù)清洗是數(shù)據(jù)分析中最耗時(shí)的部分,掌握這些函數(shù)能事半功倍。
# 重命名列名(需要將所有列名列出,否則會(huì)報(bào)錯(cuò))
df.columns = ['a', 'b', 'c']
# 檢查 DataFrame 對(duì)象中的空值,并返回一個(gè) Boolean 數(shù)組
pd.isnull(df)
# 檢查 DataFrame 對(duì)象中的非空值,并返回一個(gè) Boolean 數(shù)組
pd.notnull(df)
# 刪除所有包含空值的行
df.dropna()
# 刪除所有包含空值的列
df.dropna(axis=1)
# 刪除所有小于 n 個(gè)非空值的行
df.dropna(axis=1, thresh=n)
# 用 x 替換 DataFrame 對(duì)象中所有的空值
df.fillna(value=x)
# 指定列填充缺失值
df['column_name'].fillna(x)
# 將 Series 中的數(shù)據(jù)類型更改為 float 類型
s.astype(float)
# 用 ‘one' 代替所有等于 1 的值
s.replace(1, 'one')
# 用 'one' 代替 1,用 'three' 代替 3
s.replace([1, 3], ['one', 'three'])
# 批量更改列名
df.rename(columns=lambda x: x + 1)
# 選擇性更改列名
df.rename(columns={'old_name': 'new_name'})
# 將某個(gè)字段設(shè)為索引,可接受列表參數(shù),即設(shè)置多個(gè)索引
df.set_index('column_one')
# 將索引設(shè)置為 col1 字段,并將索引新設(shè)置為 0, 1, 2...
df.reset_index() # 原文為 df.reset_index("col1"),通常直接調(diào)用或傳 drop=True
# 批量重命名索引
df.rename(index=lambda x: x + 1)
6. 排序 (Sorting)
讓數(shù)據(jù)有序排列,方便觀察趨勢(shì)。
# 對(duì)前 5 條數(shù)據(jù)進(jìn)行索引排序
df.sort_index().loc[:5]
# 按照列 col1 排序數(shù)據(jù),默認(rèn)升序排列
df.sort_values('col1')
# 按照列 col1 降序排列數(shù)據(jù)
df.sort_values('col2', ascending=False)
# 先按列 col1 升序排列,后按 col2 降序排列數(shù)據(jù)
df.sort_values(['col1', 'col2'], ascending=[True, False])
7. 分組與聚合 (Grouping & Aggregation)
數(shù)據(jù)透 視和統(tǒng)計(jì)分析的核心功能。
# 返回一個(gè)按列 col 進(jìn)行分組的 Groupby 對(duì)象
df.groupby('col')
# 返回一個(gè)按多列進(jìn)行分組的 Groupby 對(duì)象
df.groupby(['col1', 'col2'])
# 返回按列 col1 進(jìn)行分組后,列 col2 的均值
df.groupby('col1')['col2'].agg('mean')
# agg 可以接受列表參數(shù),如 agg([len, np.mean])
# 創(chuàng)建一個(gè)按列 col1 進(jìn)行分組,計(jì)算 col2 的最大值和 col3 的最大值、最小值的數(shù)據(jù)透 視表
df.pivot_table(index='col1', values=['col2', 'col3'], aggfunc={'col2': max, 'col3': [max, min]})
# 返回按列 col1 分組的所有列的均值
df.groupby('col1').agg(np.mean)
# 對(duì)特定列聚合
df.groupby('col1')['col2'].agg(['min', 'max'])
# 對(duì) DataFrame 中的每一列應(yīng)用函數(shù) np.mean
data.apply(np.mean)
# 對(duì) DataFrame 中的每一行應(yīng)用函數(shù) np.max
data.apply(np.max, axis=1)
# 通常與 groupby 連用,避免索引更改(返回與原表長(zhǎng)度一致的序列)
df.groupby('col1')['col2'].transform("sum")
8. 合并與連接 (Merging & Joining)
將多個(gè)數(shù)據(jù)表整合成一張大表。
# 【已棄用】將 df2 中的行添加到 df1 的尾部
# 注意:.append() 在 Pandas 2.0+ 中已被移除,請(qǐng)使用 pd.concat()
# df1.append(df2)
pd.concat([df1, df2]) # 推薦做法
# 將 df2 中的列添加到 df1 的尾部,值為空的對(duì)應(yīng)行與對(duì)應(yīng)列都不要
df.concat([df1, df2], axis=1, join='inner')
# 對(duì) df1 的列和 df2 的列執(zhí)行 SQL 形式的 join
# 默認(rèn)按照索引來進(jìn)行合并,如果 df1 和 df2 有共同字段時(shí),會(huì)報(bào)錯(cuò)
# 可通過設(shè)置 lsuffix, rsuffix 來進(jìn)行解決
# 如果需要按照共同列進(jìn)行合并,就要用到 set_index(col1)
df1.join(df2.set_index('col1'), on='col1', how='inner')
# 對(duì) df1 和 df2 合并,按照 col1,方式為 outer
pd.merge(df1, df2, on='col1', how='outer')
# 與 df1.join(df2, how='outer') 效果相同
pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
9.總結(jié)
這 67 個(gè)函數(shù)涵蓋了 Pandas 使用場(chǎng)景的 80% 以上。熟練掌握它們,你的數(shù)據(jù)處理效率將得到質(zhì)的飛躍!
Tips:
- 遇到報(bào)錯(cuò)時(shí),先檢查數(shù)據(jù)類型 (
df.info()) 和缺失值 (df.isnull())。 - 盡量使用向量化操作(如
apply,map, 直接運(yùn)算),避免使用for循環(huán)遍歷 DataFrame。 - 注意 Pandas 版本更新,部分舊函數(shù)(如
ix,append)已被新函數(shù)替代。
到此這篇關(guān)于一文詳解Python Pandas中67個(gè)最常用的數(shù)據(jù)處理函數(shù)的文章就介紹到這了,更多相關(guān)Python Pandas函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解基于Transformer實(shí)現(xiàn)電影評(píng)論星級(jí)分類任務(wù)
這篇文章主要為大家介紹了詳解基于Transformer實(shí)現(xiàn)電影評(píng)論星級(jí)分類任務(wù)過程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
python-opencv 中值濾波{cv2.medianBlur(src, ksize)}的用法
這篇文章主要介紹了python-opencv 中值濾波{cv2.medianBlur(src, ksize)}的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2021-06-06
Python中二進(jìn)制文件內(nèi)存映射技術(shù)的原理與應(yīng)用詳解
這篇文章將深入探討Python中內(nèi)存映射技術(shù)的原理、用法和實(shí)際應(yīng)用場(chǎng)景,從基礎(chǔ)概念到高級(jí)技巧,為讀者提供全面的專業(yè)指導(dǎo),下面小編就來和大家詳細(xì)介紹一下吧2025-09-09
Python實(shí)現(xiàn)過濾單個(gè)Android程序日志腳本分享
這篇文章主要介紹了Python實(shí)現(xiàn)過濾單個(gè)Android程序日志腳本分享,本文講解了原理、實(shí)現(xiàn)代碼、使用方法、最新代碼等內(nèi)容,需要的朋友可以參考下2015-01-01
Python seek()和tell()函數(shù)的具體使用
本文主要介紹了Python seek()和tell()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

