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

Python Pandas實現(xiàn)Excel數(shù)據(jù)選取和處理的完整指南

 更新時間:2026年07月16日 09:13:37   作者:楊利杰YJlio  
還在用Excel手工篩選排序嗎,這篇pandas實戰(zhàn)教程將帶你掌握DataFrame的選列、選行、條件篩選、排序、新增列和刪除等核心操作,幫你把重復(fù)的表格處理工作自動化,告別低效手工操作

前言

真實辦公場景里,我們很少只是“打開一張表看一眼”。更多時候是:只要某幾列,只看前幾行,篩出滿足條件的數(shù)據(jù),按金額或日期排序,新增一列計算結(jié)果,最后刪除無關(guān)列并導(dǎo)出。這些動作在 Excel 里靠篩選、排序、公式和刪除列完成,在 Python 里主要靠 DataFrame 的選取與處理完成。

本文重點圍繞幾個高頻動作展開:按列選取、按行選取、按區(qū)塊選取、條件篩選、排序、新增列、刪除行列,以及如何把這些操作串成一個完整的數(shù)據(jù)處理鏈路。

我的理解是:DataFrame 的選取和處理,本質(zhì)上就是把 Excel 里的“選列、篩選、排序、公式、刪除”變成可以復(fù)用的代碼流程。

為了演示方便,先準備一個小型 DataFrame。后面所有示例都基于這張表展開。

import pandas as pd

data = pd.DataFrame({
    "c1": ["A", "B", "C", "D"],
    "c2": [10, 30, 20, 30],
    "c3": [100, 200, 150, 80],
}, index=["r1", "r2", "r3", "r4"])

print(data)

這張圖展示的是 DataFrame 中“選列”和“選行”的基礎(chǔ)思路。左側(cè)是表格里的列和行,右側(cè)對應(yīng)的是 data['c1']、data[['c1']]head()、ilocloc 等常見寫法。

從圖中可以看出,DataFrame 的數(shù)據(jù)選取不是只有一種寫法。按列、按行、按標簽、按位置都可以,但每種寫法背后的含義不同。真正寫腳本時,不能只看代碼短不短,而要看當前需求到底是“按字段名選”,還是“按行列位置選”。

2. 為什么這一節(jié)是 pandas 辦公自動化的核心

在辦公自動化里,讀取文件只是第一步。真正決定效率的,是讀取以后怎么處理數(shù)據(jù)。比如財務(wù)表里只保留“電子設(shè)備”,資產(chǎn)表里只保留某個部門,銷售表里按金額降序排序,人員名單里新增一列處理狀態(tài)。這些都屬于數(shù)據(jù)選取和處理。

如果不用 pandas,這些操作可能要靠手動篩選、復(fù)制粘貼、排序和公式拖拽完成。問題是,只要數(shù)據(jù)量稍微大一點,或者每個月都要重復(fù)做,這種手工方式就會變成低效且容易出錯的工作。

推薦把這一節(jié)當成“Excel 自動化處理鏈”的基本功:先會選,再會篩,再會排,再會算,最后會刪和導(dǎo)出。

不要只記單個函數(shù)。真實工作里最有價值的不是會寫 sort_values(),而是能把選取、篩選、排序、新增列、刪除列串成穩(wěn)定流程。

3. 按列選取:data[‘c1’] 和 data[[‘c1’]] 的區(qū)別

按列選取是最常見的操作。比如一張表里有幾十列,但我只關(guān)心姓名、部門、金額、日期這些字段,就需要先把目標列選出來。

選取單列最常見的寫法是:

col = data["c1"]
print(col)
print(type(col))

這時返回的是 Series,可以理解成一維數(shù)據(jù)。它像 Excel 里單獨拿出來的一列,但不是完整二維表。

col_df = data[["c1"]]
print(col_df)
print(type(col_df))

這時返回的是 DataFrame,仍然保持二維表結(jié)構(gòu)。雖然只選了一列,但它仍然有表頭和表格形態(tài)。

這里的關(guān)鍵區(qū)別是:data[‘c1’] 返回 Seriesdata[[‘c1’]] 返回 DataFrame。

如果只是拿這一列做判斷或計算,用 data["c1"] 很自然;如果后面還要拼接、導(dǎo)出、繼續(xù)和其他列組成表,建議使用 data[["c1"]] 保留表結(jié)構(gòu)。

推薦做法:新手階段如果不確定后面是否還要保持表結(jié)構(gòu),優(yōu)先用雙中括號 data[[‘c1’]],這樣更接近 Excel 表格思維。

選取多列也使用雙中括號:

cols = data[["c1", "c3"]]
print(cols)

這種寫法在實際工作中非常高頻,比如只保留“資產(chǎn)編號、資產(chǎn)名稱、使用部門、凈值”這些關(guān)鍵字段。

4. 按行選?。篽ead、iloc、loc 怎么選

按行選取常用于查看數(shù)據(jù)樣例、截取前幾行、按索引標簽定位某條記錄。讀取一張陌生表后,我一般不會馬上寫復(fù)雜邏輯,而是先用 head() 看一下數(shù)據(jù)長什么樣。

print(data.head())
print(data.head(3))

head() 默認查看前 5 行,head(3) 查看前 3 行。它適合做快速預(yù)覽,尤其是剛讀完 Excel 或 CSV 后,用來確認字段名、行數(shù)、數(shù)據(jù)格式是否符合預(yù)期。

如果要按“位置”選行,推薦使用 iloc。

print(data.iloc[0])
print(data.iloc[0:2])

iloc[0] 表示取第 0 行,也就是第一行;iloc[0:2] 表示取第 0 行到第 1 行,左閉右開。

如果要按“標簽”選行,推薦使用 loc。

print(data.loc["r2"])
print(data.loc["r2":"r4"])

loc["r2"] 表示取索引標簽為 r2 的行。需要注意的是,loc["r2":"r4"] 這種標簽切片通常會包含右端,也就是包含 r4

容易混淆的點:iloc 看位置,使用 0、1、2 這類數(shù)字;loc 看標簽,使用索引名、日期、編號這類業(yè)務(wù)標簽。

實際辦公里,如果索引是自動生成的普通數(shù)字,iloc 更直觀;如果索引是工號、日期、訂單號,loc 讀起來更像業(yè)務(wù)語言。

5. 按區(qū)塊選取:iloc[row, col] 與 loc[rows, cols]

只選一列或一行還不夠,實際處理表格時經(jīng)常要選一塊區(qū)域。比如取前 2 行前 2 列,或者取某幾個行標簽下的指定字段。這時就需要用到 iloc[row, col]loc[rows, cols]。

iloc 按位置選區(qū)塊:

print(data.iloc[0, 1])
print(data.iloc[0:2, 0:2])

data.iloc[0, 1] 表示第 0 行第 1 列,對應(yīng)一個單元格值;data.iloc[0:2, 0:2] 表示前 2 行、前 2 列,對應(yīng)一個小區(qū)塊。

loc 按標簽選區(qū)塊:

print(data.loc["r2", "c3"])
print(data.loc["r1":"r3", ["c1", "c3"]])

data.loc["r2", "c3"] 表示取行標簽為 r2、列名為 c3 的值;data.loc["r1":"r3", ["c1", "c3"]] 表示取 r1r3 這些行,并只保留 c1c3 兩列。

這張圖展示的是 ilocloc 選區(qū)塊的區(qū)別。左側(cè)是按數(shù)字位置選擇,右側(cè)是按行標簽和列名選擇。

從圖中可以看出,iloc 更像“第幾行第幾列”,loc 更像“哪個編號、哪個字段”。如果數(shù)據(jù)表有明確業(yè)務(wù)索引,比如員工編號、資產(chǎn)編號、日期,loc 的可讀性會更好。

一句話記憶:iloc 用位置,loc 用標簽。位置適合臨時截取,標簽適合業(yè)務(wù)定位。

注意:不要把 iloc 的位置數(shù)字和 loc 的標簽混著用。很多選錯數(shù)據(jù)的問題,本質(zhì)就是這兩個概念沒分清。

6. 條件篩選:從表里只保留符合條件的行

篩選是 pandas 里最接近 Excel 篩選器的操作。它的本質(zhì)不是修改原表,而是根據(jù)條件從原始表中“挑出符合條件的行”。

單條件篩選比較直觀:

result = data[data["c2"] > 15]
print(result)

這段代碼表示只保留 c2 大于 15 的行。它和 Excel 里篩選“c2 大于 15”是同一種思路。

復(fù)合條件需要使用 &|。

result = data[(data["c2"] == 30) & (data["c3"] >= 100)]
print(result)

這表示同時滿足兩個條件:c2 等于 30,并且 c3 大于等于 100。

result = data[(data["c2"] == 10) | (data["c3"] < 100)]
print(result)

這表示滿足任意一個條件即可:c2 等于 10,或者 c3 小于 100。

這張圖展示的是條件篩選的過程。原始表經(jīng)過條件判斷后,只保留符合條件的行,其他行會被過濾掉。

從圖中可以看出,條件篩選更像是一個漏斗。原始數(shù)據(jù)進入漏斗,只有滿足條件的數(shù)據(jù)會留下來。這也是 pandas 做報表清洗時最常用的動作之一。

兩個坑必須記?。?/strong>復(fù)合條件要用 &|,不能用 andor;每個條件都要用括號包起來。

推薦做法:篩選后先打印 result.shapelen(result),確認保留下來的行數(shù)是否符合預(yù)期。

print("篩選后行數(shù):", len(result))
print("篩選后形狀:", result.shape)

7. 排序:sort_values 和 sort_index

排序也是辦公表格里非常高頻的動作。比如按金額從高到低、按日期從早到晚、按部門和金額組合排序。在 pandas 中,按列排序主要使用 sort_values(),按索引排序主要使用 sort_index()。

按某一列升序排序:

result = data.sort_values(by="c2")
print(result)

按某一列降序排序:

result = data.sort_values(by="c2", ascending=False)
print(result)

按多列排序也很常用。比如先按 c2 升序,再按 c3 降序:

result = data.sort_values(by=["c2", "c3"], ascending=[True, False])
print(result)

如果要按索引排序,可以使用:

result = data.sort_index()
print(result)

如果索引是日期、編號、工號,sort_index() 會非常有用。

這里可以把排序理解成:sort_values() 看數(shù)據(jù)列,sort_index() 看索引。

推薦做法:報表輸出前最好明確排序規(guī)則,否則每次導(dǎo)出的表順序可能不一致,后續(xù)對比和復(fù)核會很麻煩。

8. 新增列與刪除行列:讓表格真正完成加工

排序只是整理順序,真正讓數(shù)據(jù)產(chǎn)生新結(jié)果的動作,是新增列。它非常像 Excel 里新增一列公式。比如把 c2 乘以 2,生成一個新的 c4 列。

data["c4"] = data["c2"] * 2
print(data)

也可以寫更接近業(yè)務(wù)邏輯的組合計算:

data["c4"] = data["c2"] * 10 + data["c3"]
print(data)

這類操作在真實報表里非常常見,比如新增“含稅金額”“折扣后金額”“處理狀態(tài)”“是否達標”等字段。

這張圖展示的是排序與新增列的處理邏輯。左側(cè)是通過 sort_values() 調(diào)整數(shù)據(jù)順序,右側(cè)是通過 data['c4'] = ... 新增計算結(jié)果列。

從圖中可以看出,排序解決的是“順序問題”,新增列解決的是“結(jié)果生成問題”。在辦公自動化里,這兩個動作經(jīng)常連在一起:先篩選和排序,再基于結(jié)果生成新字段。

刪除列可以使用 drop(columns=...)

data2 = data.drop(columns=["c3"])
print(data2)

刪除行可以使用 drop(index=...)

data2 = data.drop(index=["r1", "r3"])
print(data2)

如果使用 inplace=True,會直接修改原對象。

data.drop(columns=["c3"], inplace=True)

新手階段不建議頻繁使用 inplace=True。它會直接改掉原始對象,調(diào)試時不容易回退。更穩(wěn)的做法是生成新變量,比如 data_new = data.drop(…)。

推薦做法:刪除前先確認列名和行標簽,刪除后打印 data.columnsdata.shape 做驗證。

print(data.columns)
print(data.shape)

9. 把操作串起來:一個典型辦公處理鏈

前面每個動作都是單點能力,但實際工作中更常見的是組合使用。比如現(xiàn)在有一個需求:篩選出 c2 >= 20 的行,然后按 c3 降序排序,再新增一列 c4 = c2 * 2,最后刪除 c1。

這類需求在真實工作里非常像“從原始表生成處理后報表”??梢赃@樣寫:

result = data[data["c2"] >= 20] \
    .sort_values(by="c3", ascending=False)

result["c4"] = result["c2"] * 2

result = result.drop(columns=["c1"])

print(result)

這段代碼把篩選、排序、新增列、刪除列串在一起。讀起來就是一條清晰的處理鏈:先留下需要的數(shù)據(jù),再調(diào)整順序,再生成結(jié)果字段,最后去掉無關(guān)字段。

這張圖展示的是完整的數(shù)據(jù)處理流程:讀取 DataFrame,然后依次完成選取、篩選、排序、新增列、刪除,最后輸出到 Excel 或 CSV。

從圖中可以看出,一篇表格處理腳本的價值不在于某一個函數(shù),而在于能不能把多個動作組織成穩(wěn)定流程。對辦公自動化來說,最終目標不是“會寫一行代碼”,而是把重復(fù)的數(shù)據(jù)處理動作固化下來。

這里的本質(zhì)是:把 Excel 里的手工篩選、排序、公式、刪除列,轉(zhuǎn)換成一條可以重復(fù)執(zhí)行的代碼流水線。

建議保存這種處理鏈模板。以后遇到類似報表,只需要替換列名、條件和計算公式,就可以快速復(fù)用。

10. 常見問題和踩坑提醒

第一個常見問題是:為什么 data['c1']data[['c1']] 看起來差不多,但后面處理結(jié)果不一樣?原因是前者返回 Series,后者返回 DataFrame。一個是一維數(shù)據(jù),一個是二維表結(jié)構(gòu),后續(xù)拼接、導(dǎo)出、選擇多列時行為會不同。

第二個常見問題是:為什么復(fù)合篩選條件報錯?大概率是用了 and / or,或者條件沒有加括號。pandas 里多個條件要用 & / |,并且每個條件都要括起來。

# 正確寫法
result = data[(data["c2"] == 30) & (data["c3"] >= 100)]

第三個常見問題是:為什么 lociloc 選出來的數(shù)據(jù)不一樣?因為 loc 走標簽,iloc 走位置。標簽不一定等于位置,尤其是索引被改成工號、日期、編號以后,更不能混用。

第四個常見問題是:為什么新增列時報 SettingWithCopyWarning?通常是因為你對篩選后的切片結(jié)果繼續(xù)賦值,pandas 不確定你是在改原數(shù)據(jù)還是副本。更穩(wěn)的做法是篩選后使用 .copy()。

result = data[data["c2"] >= 20].copy()
result["c4"] = result["c2"] * 2

這類警告不要無視。它不一定立刻導(dǎo)致錯誤,但說明你的賦值邏輯可能不夠明確,后面腳本復(fù)雜后容易出現(xiàn)結(jié)果不穩(wěn)定。

第五個常見問題是:為什么刪除列以后找不到原字段了?如果你使用了 inplace=True,原對象已經(jīng)被直接修改。新手階段建議盡量生成新對象,保留原數(shù)據(jù)用于回退和對比。

推薦調(diào)試習(xí)慣:每一步處理后打印 shape、columns 或前幾行結(jié)果,確認數(shù)據(jù)結(jié)構(gòu)沒有偏離預(yù)期。

print("當前形狀:", result.shape)
print("當前列名:", result.columns.tolist())
print(result.head())

11. 總結(jié)

這一節(jié)的核心,是掌握 DataFrame 日常處理數(shù)據(jù)的幾個基礎(chǔ)動作:選列、選行、選區(qū)塊、篩選、排序、新增列和刪除。它們看起來是零散函數(shù),但放到辦公自動化里,其實就是一條完整的數(shù)據(jù)清洗與整理鏈路。

我把本文重點壓縮成幾句話:data['c1'] 返回 Series,data[['c1']] 返回 DataFrame;iloc 按位置選,loc 按標簽選;復(fù)合篩選用 & / |,條件必須加括號;排序用 sort_values()sort_index();新增列就是寫一整列公式;刪除時謹慎使用 inplace=True。

對我來說,這一節(jié)最有價值的地方,不是某個函數(shù)本身,而是開始把 Excel 的手工操作翻譯成代碼流程。只要這個思路建立起來,后續(xù)做月報、資產(chǎn)表、人員名單、設(shè)備清單、故障統(tǒng)計表,很多重復(fù)動作都可以自動化。

我的最終理解是:pandas 的表格處理能力,本質(zhì)上是在用代碼重建 Excel 的篩選、排序、公式和清洗流程。

后續(xù)寫辦公自動化腳本時,可以優(yōu)先按“讀取 → 選取 → 篩選 → 排序 → 新增列 → 刪除 → 導(dǎo)出”的順序設(shè)計腳本。

真正需要警惕的不是代碼不會寫,而是沒驗證每一步處理后的數(shù)據(jù)是否符合預(yù)期。表格處理最怕靜默錯誤:代碼不報錯,但結(jié)果已經(jīng)錯了。

以上就是Python Pandas實現(xiàn)Excel數(shù)據(jù)選取和處理的完整指南的詳細內(nèi)容,更多關(guān)于Python Pandas Excel數(shù)據(jù)選取和處理的資料請關(guān)注腳本之家其它相關(guān)文章!

  • Python實現(xiàn)以時間換空間的緩存替換算法

    Python實現(xiàn)以時間換空間的緩存替換算法

    緩存是指可以進行高速數(shù)據(jù)交換的存儲器,它先于內(nèi)存與CPU交換數(shù)據(jù),因此速度很快。緩存就是把一些數(shù)據(jù)暫時存放于某些地方,可能是內(nèi)存,也有可能硬盤。下面給大家介紹Python實現(xiàn)以時間換空間的緩存替換算法,需要的朋友參考下
    2016-02-02
  • python將秒數(shù)轉(zhuǎn)化為時間格式的實例

    python將秒數(shù)轉(zhuǎn)化為時間格式的實例

    今天小編就為大家分享一篇python將秒數(shù)轉(zhuǎn)化為時間格式的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(八):XML生成與解析(DOM、ElementTree)

    python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(八):XML生成與解析(DOM、ElementTree)

    DOM是Document Object Model的簡稱,XML 文檔的高級樹型表示。該模型并非只針對 Python,而是一種普通XML 模型。Python 的 DOM 包是基于 SAX 構(gòu)建的,并且包括在 Python 2.0 的標準 XML 支持里
    2014-06-06
  • Python中的 ansible 動態(tài)Inventory 腳本

    Python中的 ansible 動態(tài)Inventory 腳本

    這篇文章主要介紹了Python中的 ansible 動態(tài)Inventory 腳本,本章節(jié)通過實例代碼從mysql數(shù)據(jù)作為數(shù)據(jù)源生成動態(tài)ansible主機為入口介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2020-01-01
  • python用列表生成式寫嵌套循環(huán)的方法

    python用列表生成式寫嵌套循環(huán)的方法

    今天小編就為大家分享一篇python用列表生成式寫嵌套循環(huán)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python實現(xiàn)圖像邊緣檢測

    python實現(xiàn)圖像邊緣檢測

    這篇文章主要為大家詳細介紹了python實現(xiàn)圖像邊緣檢測,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python多線程正確用法實例解析

    Python多線程正確用法實例解析

    這篇文章主要介紹了Python多線程正確用法實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Python中操作Excel的七大模塊對比終極指南

    Python中操作Excel的七大模塊對比終極指南

    Python 作為一門強大的編程語言,提供了多個優(yōu)秀的庫來操作 Excel 文件,本文將對?xlrd、xlwt、xlutils、xlwings、XlsxWriter、openpyxl、pandas?這七大模塊進行全面對比,幫助你選擇最合適的工具
    2025-09-09
  • 一文詳解如何使用Python實現(xiàn)文件監(jiān)控自動化系統(tǒng)

    一文詳解如何使用Python實現(xiàn)文件監(jiān)控自動化系統(tǒng)

    這篇文章主要介紹了如何使用Python實現(xiàn)文件監(jiān)控自動化系統(tǒng),解決日常工作中的文件管理痛點,系統(tǒng)基于Watchdog庫實時監(jiān)控文件夾,支持文件自動分類(按類型/大小/日期)和微信通知提醒,文章詳細講解了核心代碼實現(xiàn),需要的朋友可以參考下
    2026-01-01
  • 最新評論

    专栏| 北海市| 洪雅县| 黔江区| 抚松县| 富锦市| 蒙山县| 宝鸡市| 武川县| 绩溪县| 大丰市| 正镶白旗| 焦作市| 屯门区| 临洮县| 黄浦区| 宣化县| 上犹县| 开江县| 阿拉善盟| 洮南市| 东山县| 三穗县| 炎陵县| 郑州市| 塔河县| 长顺县| 永济市| 库伦旗| 德安县| 玉门市| 峡江县| 福安市| 舟曲县| 台东县| 崇仁县| 嘉义市| 马尔康县| 怀来县| 肇东市| 顺义区|