Pandas進階指南之數(shù)據(jù)合并與缺失值處理詳解
本節(jié)課,我們將學習數(shù)據(jù)清洗(處理缺失值)、多表關(guān)聯(lián)合并(Python版的VLOOKUP),以及如何用一行代碼生成數(shù)據(jù)透 視表。
數(shù)據(jù)清洗:處理缺失數(shù)據(jù) (NaN)
從系統(tǒng)導出的數(shù)據(jù)經(jīng)常會遇到空白單元格,pandas 會將其識別為 NaN (Not a Number)。在分析前,我們必須妥善處理這些空值。
import pandas as pd
df = pd.read_excel("messy_data.xlsx")
# 1. 查看哪些列有缺失值
print(df.isnull().sum())
# 2. 刪除含有缺失值的行
# 如果某行只要有空值就整行刪除
df_dropped = df.dropna()
# 只有當"銷售額"這一列為空時,才刪除該行
df_dropped_subset = df.dropna(subset=["銷售額"])
# 3. 填充缺失值
# 將所有空值填充為 0
df_filled_0 = df.fillna(0)
# 針對不同列填充不同的值:數(shù)值列填0,文本列填"未知"
df_filled = df.fillna({"銷售額": 0, "部門": "未知部門"})
多表合并(Merge):碾壓 VLOOKUP
在Excel中,如果我們要根據(jù)“工號”把兩張表的數(shù)據(jù)匹配到一起,通常會用到 VLOOKUP 公式。如果數(shù)據(jù)量大,VLOOKUP會非??ā6?pandas 中,merge() 函數(shù)可以瞬間完成萬級數(shù)據(jù)的匹配。
假設(shè)我們有兩張表:
df_emp: 包含 [工號, 姓名, 部門ID]df_dept: 包含 [部門ID, 部門名稱, 部門負責人]
df_emp = pd.read_excel("employees.xlsx")
df_dept = pd.read_excel("departments.xlsx")
# 使用 merge 進行關(guān)聯(lián)匹配
# on="部門ID" 表示依據(jù)這一列進行匹配
# how="left" 表示以左表(df_emp)為基準,找不到的部門信息顯示為 NaN
merged_df = pd.merge(df_emp, df_dept, on="部門ID", how="left")
print(merged_df.head())
多表拼接(Concat):上下堆疊數(shù)據(jù)
每個月你都會收到一份格式相同的月度銷售表(1月.xlsx, 2月.xlsx…),你需要把它們匯總成一張年度大表。這時用 concat() 最合適。
df_jan = pd.read_excel("1月銷售.xlsx")
df_feb = pd.read_excel("2月銷售.xlsx")
# ignore_index=True 表示重新生成行索引(0,1,2...),忽略原來的行號
df_total = pd.concat([df_jan, df_feb], ignore_index=True)
制作數(shù)據(jù)透 視表(Pivot Table)
Excel 的數(shù)據(jù)透 視表功能極其強大,而在 pandas 中,同樣可以通過 pivot_table 輕松實現(xiàn)。
需求:統(tǒng)計每個城市(行)、每個部門(列)的平均銷售額。
# data: 要透 視的 DataFrame
# values: 要計算的數(shù)值列
# index: 對應透 視表的“行”標簽
# columns: 對應透 視表的“列”標簽
# aggfunc: 計算方式(默認是均值 mean,這里我們用 sum 求和)
# fill_value=0: 如果透 視后有空缺,用0填充
pivot = pd.pivot_table(
df,
values="銷售額",
index="城市",
columns="部門",
aggfunc="sum",
fill_value=0
)
print(pivot)
# 將透 視表結(jié)果保存為Excel
pivot.to_excel("銷售數(shù)據(jù)透 視表.xlsx")將多個 DataFrame 導出到同一個 Excel 的不同 Sheet 頁
有時候我們希望把原始數(shù)據(jù)、匯總數(shù)據(jù)、透 視表放在同一個 Excel 文件的不同標簽頁中。
# 使用 ExcelWriter 上下文管理器
with pd.ExcelWriter("最終報告.xlsx") as writer:
df_total.to_excel(writer, sheet_name="全年明細", index=False)
merged_df.to_excel(writer, sheet_name="員工部門信息", index=False)
pivot.to_excel(writer, sheet_name="城市部門透 視表")
print("多Sheet報表導出成功!")知識擴展
在 pandas 中,最核心的數(shù)據(jù)結(jié)構(gòu)叫做 DataFrame。你可以把它直接想象成 Excel 中的一張二維數(shù)據(jù)表,有行號(Index)和列名(Columns)。
讀取與保存 Excel 數(shù)據(jù)
pandas 讀取和保存數(shù)據(jù)的代碼極其簡潔,通常只需要一行代碼!
import pandas as pd
# 1. 讀取 Excel 文件
# 默認讀取第一個 Sheet 頁
df = pd.read_excel("sales_data.xlsx")
# 也可以指定讀取名為 '2023數(shù)據(jù)' 的 Sheet
# df = pd.read_excel("sales_data.xlsx", sheet_name="2023數(shù)據(jù)")
# 查看前5行數(shù)據(jù),快速了解數(shù)據(jù)概況
print(df.head())
# 查看數(shù)據(jù)的基本信息(行數(shù)、列數(shù)、數(shù)據(jù)類型、是否有缺失值)
print(df.info())
# 2. 將 DataFrame 保存為新的 Excel 文件
# index=False 表示不保存最左側(cè)的行索引號
df.to_excel("sales_data_backup.xlsx", index=False)
數(shù)據(jù)篩選:精準定位你想要的數(shù)據(jù)
在Excel中,我們通常點擊表頭上的漏斗圖標進行篩選。在 pandas 中,我們通過“條件判斷”來實現(xiàn)。
假設(shè)我們的表中有:姓名, 部門, 銷售額, 城市 等列。
單條件篩選
找出所有“銷售部”的員工數(shù)據(jù):
sales_dept = df[df["部門"] == "銷售部"] print(sales_dept)
找出銷售額大于 10000 的記錄:
high_sales = df[df["銷售額"] > 10000]
多條件篩選
在 pandas 中,& 代表“且”(AND),| 代表“或”(OR)。注意:每個條件必須用括號括起來!
找出“銷售部” 且 “銷售額大于10000” 的數(shù)據(jù):
excellent_sales = df[(df["部門"] == "銷售部") & (df["銷售額"] > 10000)]
找出在“北京”或“上海”的員工數(shù)據(jù):
# 方法一:使用 | bj_sh_staff = df[(df["城市"] == "北京") | (df["城市"] == "上海")] # 方法二:使用 isin() 方法(推薦,更優(yōu)雅) bj_sh_staff = df[df["城市"].isin(["北京", "上海"])]
數(shù)據(jù)排序
類似Excel中的升序/降序功能,pandas 使用 sort_values() 方法。
# 按照銷售額從高到低排序(降序:ascending=False) sorted_df = df.sort_values(by="銷售額", ascending=False) # 多列排序:先按部門升序,部門相同的再按銷售額降序 sorted_multi = df.sort_values(by=["部門", "銷售額"], ascending=[True, False])
數(shù)據(jù)分組統(tǒng)計 (GroupBy)
這是數(shù)據(jù)分析中最常用的功能之一!相當于Excel中簡單版的數(shù)據(jù)透 視表。
需求:統(tǒng)計每個部門的總銷售額。
# 按“部門”分組,并對“銷售額”求和
dept_sales = df.groupby("部門")["銷售額"].sum()
# 重置索引,讓結(jié)果變成一個漂亮的 DataFrame
dept_sales_df = dept_sales.reset_index()
print(dept_sales_df)
需求:統(tǒng)計每個城市的員工人數(shù)、平均銷售額。
# 使用 agg 函數(shù)進行多種聚合計算
city_stats = df.groupby("城市").agg({
"姓名": "count", # 計數(shù)(人數(shù))
"銷售額": "mean" # 求平均值
})
# 修改列名以便閱讀
city_stats.rename(columns={"姓名": "員工人數(shù)", "銷售額": "平均銷售額"}, inplace=True)
print(city_stats)
小結(jié)
通過本節(jié)課,你已經(jīng)掌握了數(shù)據(jù)分析中最核心的數(shù)據(jù)清洗、表關(guān)聯(lián)拼接和數(shù)據(jù)透 視功能。你手頭的武器庫已經(jīng)足夠應對 80% 的日常數(shù)據(jù)處理需求了。
最后一節(jié)課,我們將結(jié)合 os 模塊,進行一次酣暢淋漓的實戰(zhàn):一鍵自動讀取上百個Excel文件,處理合并后自動生成帶有格式的報表!
到此這篇關(guān)于Pandas進階指南之數(shù)據(jù)合并、透 視表與缺失值處理詳解的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- pandas中數(shù)據(jù)缺失值的檢測,統(tǒng)計與處理教學
- Pandas數(shù)據(jù)清洗之缺失值處理和重復值處理詳解
- 從缺失值到多層索引詳解Pandas數(shù)據(jù)清洗指南
- python?sklearn與pandas實現(xiàn)缺失值數(shù)據(jù)預處理流程詳解
- pandas數(shù)據(jù)清洗(缺失值和重復值的處理)
- Pandas?DataFrame數(shù)據(jù)合并與連接的完整指南
- Pandas中數(shù)據(jù)合并的實現(xiàn)
- Pandas中數(shù)據(jù)表合并的幾種實現(xiàn)方法
- pandas數(shù)據(jù)合并與重塑之merge詳解
相關(guān)文章
Pycharm中配置Jupyter環(huán)境的圖文教程
本文主要介紹了Pycharm中配置Jupyter環(huán)境的圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化
這篇文章主要介紹了Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化,Matplotlib?是?Python?中常用的?2D?繪圖庫,它能輕松地將數(shù)據(jù)進行可視化,作出精美的圖表2022-08-08
詳解pyppeteer(python版puppeteer)基本使用
這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06
Python3實現(xiàn)打格點算法的GPU加速實例詳解
這篇文章主要給大家介紹了關(guān)于Python3實現(xiàn)打格點算法的GPU加速的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友可以參考下2021-09-09
python 請求服務器的實現(xiàn)代碼(http請求和https請求)
本篇文章主要介紹了python 請求服務器的實現(xiàn)代碼(http請求和https請求),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05

