最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas進(jìn)階指南之?dāng)?shù)據(jù)合并與缺失值處理詳解

 更新時(shí)間:2026年04月29日 08:36:00   作者:小莊-Python辦公  
這篇文章主要為大家詳細(xì)介紹了使用Python的pandas庫進(jìn)行Excel數(shù)據(jù)處理的進(jìn)階技巧,主要包括數(shù)據(jù)清洗,多表合并與拼接,數(shù)據(jù)透?視表制作等辦公自動(dòng)化核心功能,希望對(duì)大家有所幫助

本節(jié)課,我們將學(xué)習(xí)數(shù)據(jù)清洗(處理缺失值)、多表關(guān)聯(lián)合并(Python版的VLOOKUP),以及如何用一行代碼生成數(shù)據(jù)透 視表。

數(shù)據(jù)清洗:處理缺失數(shù)據(jù) (NaN)

從系統(tǒng)導(dǎo)出的數(shù)據(jù)經(jīng)常會(huì)遇到空白單元格,pandas 會(huì)將其識(shí)別為 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()
# 只有當(dāng)"銷售額"這一列為空時(shí),才刪除該行
df_dropped_subset = df.dropna(subset=["銷售額"])

# 3. 填充缺失值
# 將所有空值填充為 0
df_filled_0 = df.fillna(0)
# 針對(duì)不同列填充不同的值:數(shù)值列填0,文本列填"未知"
df_filled = df.fillna({"銷售額": 0, "部門": "未知部門"})

多表合并(Merge):碾壓 VLOOKUP

在Excel中,如果我們要根據(jù)“工號(hào)”把兩張表的數(shù)據(jù)匹配到一起,通常會(huì)用到 VLOOKUP 公式。如果數(shù)據(jù)量大,VLOOKUP會(huì)非??ā6?pandas 中,merge() 函數(shù)可以瞬間完成萬級(jí)數(shù)據(jù)的匹配。

假設(shè)我們有兩張表:

  • df_emp: 包含 [工號(hào), 姓名, 部門ID]
  • df_dept: 包含 [部門ID, 部門名稱, 部門負(fù)責(zé)人]
df_emp = pd.read_excel("employees.xlsx")
df_dept = pd.read_excel("departments.xlsx")

# 使用 merge 進(jìn)行關(guān)聯(lián)匹配
# on="部門ID" 表示依據(jù)這一列進(jìn)行匹配
# how="left" 表示以左表(df_emp)為基準(zhǔn),找不到的部門信息顯示為 NaN
merged_df = pd.merge(df_emp, df_dept, on="部門ID", how="left")

print(merged_df.head())

多表拼接(Concat):上下堆疊數(shù)據(jù)

每個(gè)月你都會(huì)收到一份格式相同的月度銷售表(1月.xlsx, 2月.xlsx…),你需要把它們匯總成一張年度大表。這時(shí)用 concat() 最合適。

df_jan = pd.read_excel("1月銷售.xlsx")
df_feb = pd.read_excel("2月銷售.xlsx")

# ignore_index=True 表示重新生成行索引(0,1,2...),忽略原來的行號(hào)
df_total = pd.concat([df_jan, df_feb], ignore_index=True)

制作數(shù)據(jù)透 視表(Pivot Table)

Excel 的數(shù)據(jù)透 視表功能極其強(qiáng)大,而在 pandas 中,同樣可以通過 pivot_table 輕松實(shí)現(xiàn)。

需求:統(tǒng)計(jì)每個(gè)城市(行)、每個(gè)部門(列)的平均銷售額。

# data: 要透 視的 DataFrame
# values: 要計(jì)算的數(shù)值列
# index: 對(duì)應(yīng)透 視表的“行”標(biāo)簽
# columns: 對(duì)應(yīng)透 視表的“列”標(biāo)簽
# aggfunc: 計(jì)算方式(默認(rèn)是均值 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")

將多個(gè) DataFrame 導(dǎo)出到同一個(gè) Excel 的不同 Sheet 頁

有時(shí)候我們希望把原始數(shù)據(jù)、匯總數(shù)據(jù)、透 視表放在同一個(gè) Excel 文件的不同標(biāo)簽頁中。

# 使用 ExcelWriter 上下文管理器
with pd.ExcelWriter("最終報(bào)告.xlsx") as writer:
    df_total.to_excel(writer, sheet_name="全年明細(xì)", index=False)
    merged_df.to_excel(writer, sheet_name="員工部門信息", index=False)
    pivot.to_excel(writer, sheet_name="城市部門透 視表")
print("多Sheet報(bào)表導(dǎo)出成功!")

知識(shí)擴(kuò)展

在 pandas 中,最核心的數(shù)據(jù)結(jié)構(gòu)叫做 DataFrame。你可以把它直接想象成 Excel 中的一張二維數(shù)據(jù)表,有行號(hào)(Index)和列名(Columns)。

讀取與保存 Excel 數(shù)據(jù)

pandas 讀取和保存數(shù)據(jù)的代碼極其簡潔,通常只需要一行代碼!

import pandas as pd

# 1. 讀取 Excel 文件
# 默認(rèn)讀取第一個(gè) 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è)的行索引號(hào)
df.to_excel("sales_data_backup.xlsx", index=False)

數(shù)據(jù)篩選:精準(zhǔn)定位你想要的數(shù)據(jù)

在Excel中,我們通常點(diǎn)擊表頭上的漏斗圖標(biāo)進(jìn)行篩選。在 pandas 中,我們通過“條件判斷”來實(shí)現(xiàn)。

假設(shè)我們的表中有:姓名, 部門, 銷售額, 城市 等列。

單條件篩選

找出所有“銷售部”的員工數(shù)據(jù):

sales_dept = df[df["部門"] == "銷售部"]
print(sales_dept)

找出銷售額大于 10000 的記錄:

high_sales = df[df["銷售額"] > 10000]

多條件篩選

在 pandas 中,& 代表“且”(AND),| 代表“或”(OR)。注意:每個(gè)條件必須用括號(hào)括起來!

找出“銷售部” 且 “銷售額大于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)計(jì) (GroupBy)

這是數(shù)據(jù)分析中最常用的功能之一!相當(dāng)于Excel中簡單版的數(shù)據(jù)透 視表。

需求:統(tǒng)計(jì)每個(gè)部門的總銷售額。

# 按“部門”分組,并對(duì)“銷售額”求和
dept_sales = df.groupby("部門")["銷售額"].sum()

# 重置索引,讓結(jié)果變成一個(gè)漂亮的 DataFrame
dept_sales_df = dept_sales.reset_index()
print(dept_sales_df)

需求:統(tǒng)計(jì)每個(gè)城市的員工人數(shù)、平均銷售額。

# 使用 agg 函數(shù)進(jìn)行多種聚合計(jì)算
city_stats = df.groupby("城市").agg({
    "姓名": "count",       # 計(jì)數(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)足夠應(yīng)對(duì) 80% 的日常數(shù)據(jù)處理需求了。

最后一節(jié)課,我們將結(jié)合 os 模塊,進(jìn)行一次酣暢淋漓的實(shí)戰(zhàn):一鍵自動(dòng)讀取上百個(gè)Excel文件,處理合并后自動(dòng)生成帶有格式的報(bào)表!

到此這篇關(guān)于Pandas進(jìn)階指南之?dāng)?shù)據(jù)合并、透 視表與缺失值處理詳解的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python之class類和方法的用法詳解

    python之class類和方法的用法詳解

    這篇文章主要介紹了python中class類和方法的用法詳解,如果有不太清楚面向?qū)ο蟮念惡头椒ǖ木幊趟枷氲男』锇榭梢越梃b參考本文
    2023-03-03
  • Pycharm中配置Jupyter環(huán)境的圖文教程

    Pycharm中配置Jupyter環(huán)境的圖文教程

    本文主要介紹了Pycharm中配置Jupyter環(huán)境的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化

    Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化

    這篇文章主要介紹了Python數(shù)據(jù)分析之Matplotlib數(shù)據(jù)可視化,Matplotlib?是?Python?中常用的?2D?繪圖庫,它能輕松地將數(shù)據(jù)進(jìn)行可視化,作出精美的圖表
    2022-08-08
  • 詳解pyppeteer(python版puppeteer)基本使用

    詳解pyppeteer(python版puppeteer)基本使用

    這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python中7刪除文件的7種方法實(shí)現(xiàn)與對(duì)比

    Python中7刪除文件的7種方法實(shí)現(xiàn)與對(duì)比

    本文提供了有關(guān)如何使用各種模塊和方法在Python中刪除文件的詳盡教程,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09
  • Python使用Selenium進(jìn)行元素定位的步驟和方法

    Python使用Selenium進(jìn)行元素定位的步驟和方法

    在使用Selenium進(jìn)行網(wǎng)頁自動(dòng)化測(cè)試時(shí),正確且高效地定位目標(biāo)元素是至關(guān)重要的,以下是詳細(xì)的步驟和方法,幫助你全面掌握如何使用Selenium進(jìn)行元素定位,需要的朋友可以參考下
    2025-06-06
  • Python中pygame的mouse鼠標(biāo)事件用法實(shí)例

    Python中pygame的mouse鼠標(biāo)事件用法實(shí)例

    這篇文章主要介紹了Python中pygame的mouse鼠標(biāo)事件用法,以完整實(shí)例形式詳細(xì)分析了pygame響應(yīng)鼠標(biāo)事件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Python3實(shí)現(xiàn)打格點(diǎn)算法的GPU加速實(shí)例詳解

    Python3實(shí)現(xiàn)打格點(diǎn)算法的GPU加速實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Python3實(shí)現(xiàn)打格點(diǎn)算法的GPU加速的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 如何解決.cuda()加載用時(shí)很長的問題

    如何解決.cuda()加載用時(shí)很長的問題

    這篇文章主要介紹了如何解決.cuda()加載用時(shí)很長的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python 請(qǐng)求服務(wù)器的實(shí)現(xiàn)代碼(http請(qǐng)求和https請(qǐng)求)

    python 請(qǐng)求服務(wù)器的實(shí)現(xiàn)代碼(http請(qǐng)求和https請(qǐng)求)

    本篇文章主要介紹了python 請(qǐng)求服務(wù)器的實(shí)現(xiàn)代碼(http請(qǐng)求和https請(qǐng)求),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論

大厂| 龙井市| 苍山县| 思茅市| 盖州市| 安新县| 施甸县| 梨树县| 南昌县| 当涂县| 宁武县| 明水县| 桐柏县| 曲水县| 北安市| 海宁市| 西贡区| 济源市| 东乡县| 格尔木市| 景洪市| 崇礼县| 平和县| 开封市| 六安市| 三台县| 浦江县| 朝阳市| 丹巴县| 岳阳县| 闽侯县| 新化县| 横山县| 海门市| 定边县| 江北区| 乌鲁木齐市| 阜宁县| 贡山| 阿拉善盟| 双流县|