2025最新Pandas數(shù)據(jù)清洗與數(shù)據(jù)處理方法大全
Pandas 是 Python 中最常用的數(shù)據(jù)分析庫(kù)之一,它可以幫助我們高效地進(jìn)行數(shù)據(jù)清洗、數(shù)據(jù)處理及數(shù)據(jù)治理。隨著大數(shù)據(jù)的不斷發(fā)展,Pandas 也在不斷優(yōu)化,尤其是處理千萬(wàn)級(jí)大數(shù)據(jù)時(shí),如何高效清洗和治理數(shù)據(jù)成為了一個(gè)非常重要的話題。本文將為你提供一篇超詳細(xì)的技術(shù)教程,涵蓋如何使用 Pandas 進(jìn)行數(shù)據(jù)清洗、數(shù)據(jù)治理和數(shù)據(jù)處理,并針對(duì)千萬(wàn)級(jí)大數(shù)據(jù)的處理方法做了特別的講解。
1. 數(shù)據(jù)清洗概述
數(shù)據(jù)清洗是數(shù)據(jù)分析的第一步,目的是通過(guò)去除數(shù)據(jù)中的噪音和錯(cuò)誤來(lái)提高數(shù)據(jù)質(zhì)量。常見的數(shù)據(jù)清洗步驟包括:
- 刪除缺失值
- 填充缺失值
- 去除重復(fù)數(shù)據(jù)
- 標(biāo)準(zhǔn)化數(shù)據(jù)
- 處理異常值
在這部分,我們將詳細(xì)介紹每一個(gè)步驟,并提供相應(yīng)的代碼示例。
1.1 刪除缺失值
缺失值是數(shù)據(jù)清洗中的常見問(wèn)題。我們可以使用 dropna()
函數(shù)刪除含有缺失值的行或列。
import pandas as pd # 創(chuàng)建一個(gè)包含缺失值的DataFrame data = { 'name': ['Tom', 'Jerry', 'Mickey', None], 'age': [20, None, 22, 25], 'city': ['New York', 'Los Angeles', 'Chicago', 'Miami'] } df = pd.DataFrame(data) # 刪除包含缺失值的行 df_cleaned = df.dropna() print(df_cleaned)
1.2 填充缺失值
有時(shí)候我們不希望丟失含有缺失值的數(shù)據(jù),而是希望通過(guò)合適的方法填充它們。Pandas 提供了 fillna()
函數(shù)來(lái)填充缺失值。
# 使用特定值填充缺失值 df_filled = df.fillna({'age': 0, 'name': 'Unknown'}) print(df_filled)
1.3 去除重復(fù)數(shù)據(jù)
數(shù)據(jù)集中的重復(fù)記錄也需要清洗,我們可以使用 drop_duplicates()
函數(shù)去除重復(fù)的行。
# 創(chuàng)建一個(gè)包含重復(fù)數(shù)據(jù)的DataFrame data = { 'name': ['Tom', 'Jerry', 'Tom', 'Mickey'], 'age': [20, 21, 20, 22], 'city': ['New York', 'Los Angeles', 'New York', 'Chicago'] } df = pd.DataFrame(data) # 去除重復(fù)行 df_no_duplicates = df.drop_duplicates() print(df_no_duplicates)
1.4 標(biāo)準(zhǔn)化數(shù)據(jù)
數(shù)據(jù)標(biāo)準(zhǔn)化是將數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一的格式。Pandas 中可以使用 apply()
函數(shù)對(duì)數(shù)據(jù)列進(jìn)行標(biāo)準(zhǔn)化處理。
# 假設(shè)我們需要將名字列中的所有字母轉(zhuǎn)為大寫 df['name'] = df['name'].apply(lambda x: x.upper()) print(df)
1.5 處理異常值
異常值可能會(huì)極大地影響分析結(jié)果,因此我們需要對(duì)數(shù)據(jù)中的異常值進(jìn)行識(shí)別和處理。常見的處理方式包括刪除、替換或?qū)⑵錃w一化。
# 通過(guò)設(shè)定一個(gè)合理范圍來(lái)過(guò)濾掉異常值 df = df[df['age'] > 18] # 假設(shè)我們只關(guān)心18歲以上的人 print(df)
2. 數(shù)據(jù)治理與數(shù)據(jù)處理
數(shù)據(jù)治理是確保數(shù)據(jù)質(zhì)量、可用性和安全性的過(guò)程。數(shù)據(jù)處理是指對(duì)數(shù)據(jù)進(jìn)行格式化、轉(zhuǎn)換、分組、篩選等操作。我們將在下面的部分詳細(xì)介紹如何使用 Pandas 完成這些任務(wù)。
2.1 數(shù)據(jù)格式化與轉(zhuǎn)換
有時(shí),我們需要將數(shù)據(jù)轉(zhuǎn)換為特定的格式,比如將日期列轉(zhuǎn)換為日期時(shí)間格式。
# 假設(shè)我們有一列日期字符串 df['date'] = pd.to_datetime(df['date']) print(df['date'])
2.2 數(shù)據(jù)分組與聚合
數(shù)據(jù)分組和聚合是數(shù)據(jù)處理中常用的操作,可以幫助我們?cè)诜诸悢?shù)據(jù)上進(jìn)行匯總分析。
# 按照城市分組并計(jì)算每個(gè)城市的平均年齡 df_grouped = df.groupby('city')['age'].mean() print(df_grouped)
2.3 數(shù)據(jù)合并與連接
在實(shí)際應(yīng)用中,常常需要將多個(gè)數(shù)據(jù)集進(jìn)行合并。Pandas 提供了 merge()
函數(shù)來(lái)進(jìn)行數(shù)據(jù)的合并。
# 假設(shè)我們有兩個(gè)DataFrame df1 = pd.DataFrame({'id': [1, 2, 3], 'name': ['Tom', 'Jerry', 'Mickey']}) df2 = pd.DataFrame({'id': [1, 2, 3], 'age': [20, 21, 22]}) # 按照'id'列合并兩個(gè)DataFrame df_merged = pd.merge(df1, df2, on='id') print(df_merged)
3. 千萬(wàn)級(jí)大數(shù)據(jù)處理方法
當(dāng)數(shù)據(jù)量達(dá)到千萬(wàn)級(jí)時(shí),Pandas 的性能可能會(huì)受到挑戰(zhàn),以下是一些處理大數(shù)據(jù)的技巧:
3.1 分批加載大數(shù)據(jù)
對(duì)于非常大的數(shù)據(jù)集,Pandas 提供了 chunksize
參數(shù)可以讓我們分批次加載數(shù)據(jù)。這樣可以避免一次性將所有數(shù)據(jù)加載到內(nèi)存中,導(dǎo)致內(nèi)存溢出。
# 使用 chunksize 參數(shù)分批加載數(shù)據(jù) chunk_size = 10000 chunks = pd.read_csv('large_data.csv', chunksize=chunk_size) for chunk in chunks: process(chunk) # 對(duì)每個(gè)批次的數(shù)據(jù)進(jìn)行處理
3.2 使用 Dask 進(jìn)行大數(shù)據(jù)處理
Dask 是一個(gè)分布式計(jì)算庫(kù),它可以擴(kuò)展 Pandas 的能力,處理比內(nèi)存大的數(shù)據(jù)集。通過(guò) Dask,我們可以實(shí)現(xiàn)類似于 Pandas 的操作,同時(shí)處理大數(shù)據(jù)。
import dask.dataframe as dd # 讀取大文件 ddf = dd.read_csv('large_data.csv') # 對(duì)數(shù)據(jù)進(jìn)行操作 ddf_grouped = ddf.groupby('column_name').mean().compute() print(ddf_grouped)
3.3 數(shù)據(jù)存儲(chǔ)優(yōu)化
在處理大數(shù)據(jù)時(shí),選擇合適的數(shù)據(jù)存儲(chǔ)格式非常重要。例如,我們可以選擇 Parquet 格式,這種格式支持更高效的讀取和寫入操作,并且支持壓縮。
# 將數(shù)據(jù)保存為Parquet格式 df.to_parquet('data.parquet')
4. 數(shù)據(jù)處理一條龍 Demo
在這一部分,我們將通過(guò)一個(gè)完整的示例來(lái)展示如何使用 Pandas 從數(shù)據(jù)讀取、清洗到數(shù)據(jù)分析的整個(gè)過(guò)程。假設(shè)我們有一個(gè)包含用戶信息的 CSV 文件,我們將對(duì)其進(jìn)行處理,清理掉缺失值、去除重復(fù)數(shù)據(jù),進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化、分組統(tǒng)計(jì),并最終進(jìn)行可視化展示。
4.1 導(dǎo)入數(shù)據(jù)
首先,我們從 CSV 文件中導(dǎo)入數(shù)據(jù),假設(shè)文件名為 user_data.csv
。
import pandas as pd # 讀取CSV文件 df = pd.read_csv('user_data.csv') # 查看數(shù)據(jù)的前幾行 print(df.head())
4.2 數(shù)據(jù)清洗
1.刪除缺失值
首先,我們清理掉含有缺失值的行,以確保數(shù)據(jù)完整性。
# 刪除任何含有缺失值的行 df_cleaned = df.dropna() print(df_cleaned.head())
2.填充缺失值
如果我們不希望丟失含有缺失值的行,可以選擇填充缺失值。例如,填充 age
列中的缺失值為 0,name
列為 ‘Unknown’。
# 填充缺失值 df_filled = df.fillna({'age': 0, 'name': 'Unknown'}) print(df_filled.head())
3.去除重復(fù)數(shù)據(jù)
接下來(lái),我們檢查并刪除重復(fù)的數(shù)據(jù)記錄。
# 去除重復(fù)行 df_no_duplicates = df.drop_duplicates() print(df_no_duplicates.head())
4.3 數(shù)據(jù)標(biāo)準(zhǔn)化
假設(shè) name
列的所有名字格式不一致(有些是大寫,有些是小寫),我們可以將所有名字轉(zhuǎn)換為大寫字母,統(tǒng)一格式。
# 將名字轉(zhuǎn)換為大寫 df['name'] = df['name'].apply(lambda x: x.upper()) print(df.head())
4.4 數(shù)據(jù)分析
1.分組統(tǒng)計(jì)
假設(shè)我們需要按 city
列進(jìn)行分組,并統(tǒng)計(jì)每個(gè)城市的平均年齡。
# 按照城市分組并計(jì)算每個(gè)城市的平均年齡 df_grouped = df.groupby('city')['age'].mean() print(df_grouped)
2.聚合操作
除了計(jì)算平均值,我們還可以執(zhí)行更多的聚合操作,如計(jì)算最大值和最小值。
# 獲取每個(gè)城市的年齡最大值和最小值 df_aggregated = df.groupby('city')['age'].agg(['max', 'min']) print(df_aggregated)
4.5 數(shù)據(jù)可視化
最后,我們將使用 matplotlib
進(jìn)行簡(jiǎn)單的可視化展示,查看每個(gè)城市的平均年齡。
import matplotlib.pyplot as plt # 創(chuàng)建一個(gè)柱狀圖 df_grouped.plot(kind='bar', title='Average Age by City') plt.ylabel('Average Age') plt.xlabel('City') plt.show()
4.6 完整代碼總結(jié)
以下是整個(gè)數(shù)據(jù)處理過(guò)程的完整代碼:
import pandas as pd import matplotlib.pyplot as plt # 讀取CSV文件 df = pd.read_csv('user_data.csv') # 數(shù)據(jù)清洗 df_cleaned = df.dropna() # 刪除缺失值 df_filled = df.fillna({'age': 0, 'name': 'Unknown'}) # 填充缺失值 df_no_duplicates = df.drop_duplicates() # 去除重復(fù)數(shù)據(jù) # 數(shù)據(jù)標(biāo)準(zhǔn)化 df['name'] = df['name'].apply(lambda x: x.upper()) # 數(shù)據(jù)分析 df_grouped = df.groupby('city')['age'].mean() # 按城市計(jì)算平均年齡 df_aggregated = df.groupby('city')['age'].agg(['max', 'min']) # 獲取最大值和最小值 # 數(shù)據(jù)可視化 df_grouped.plot(kind='bar', title='Average Age by City') plt.ylabel('Average Age') plt.xlabel('City') plt.show()
4.7 小結(jié)
通過(guò)這個(gè)一條龍的示例,我們展示了如何從數(shù)據(jù)導(dǎo)入開始,經(jīng)過(guò)數(shù)據(jù)清洗、數(shù)據(jù)標(biāo)準(zhǔn)化、分組統(tǒng)計(jì)、聚合分析,最后到數(shù)據(jù)可視化的整個(gè)流程。無(wú)論是處理小數(shù)據(jù)還是大數(shù)據(jù),掌握這些基礎(chǔ)的數(shù)據(jù)處理技巧對(duì)任何數(shù)據(jù)分析任務(wù)都是必不可少的。
5. 總結(jié)
本文詳細(xì)介紹了如何使用 Pandas 進(jìn)行數(shù)據(jù)清洗、數(shù)據(jù)治理、數(shù)據(jù)處理,并重點(diǎn)講解了如何處理千萬(wàn)級(jí)大數(shù)據(jù)。通過(guò)掌握這些技巧,你可以高效地清理數(shù)據(jù)、轉(zhuǎn)換數(shù)據(jù)格式,并在處理大數(shù)據(jù)時(shí)保持性能。
對(duì)于任何涉及數(shù)據(jù)清洗和處理的任務(wù),掌握 Pandas 都是必不可少的。
以上就是2025最新Pandas數(shù)據(jù)清洗與數(shù)據(jù)處理方法大全的詳細(xì)內(nèi)容,更多關(guān)于Pandas數(shù)據(jù)清洗與處理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)的質(zhì)因式分解算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的質(zhì)因式分解算法,涉及Python數(shù)學(xué)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-05-05Python腳本實(shí)時(shí)處理log文件的方法
Python腳本是用來(lái)對(duì)實(shí)時(shí)文件的內(nèi)容監(jiān)控。接下來(lái)通過(guò)本文給大家介紹Python腳本實(shí)時(shí)處理log文件的方法,需要的朋友參考下吧2016-11-11python實(shí)現(xiàn)excel轉(zhuǎn)置問(wèn)題詳解
這篇文章主要介紹了python實(shí)現(xiàn)excel轉(zhuǎn)置問(wèn)題詳解,excel轉(zhuǎn)置分為兩種情況,一個(gè)是較為簡(jiǎn)單的只需要行轉(zhuǎn)列,列轉(zhuǎn)行,具體詳解,感興趣的小伙伴可以參考一下2022-09-09Python3變量與基本數(shù)據(jù)類型用法實(shí)例分析
這篇文章主要介紹了Python3變量與基本數(shù)據(jù)類型用法,結(jié)合實(shí)例形式分析了Python3保留字、標(biāo)識(shí)符、變量、基本數(shù)據(jù)類型及相關(guān)操作技巧,需要的朋友可以參考下2020-02-02自動(dòng)在Windows中運(yùn)行Python腳本并定時(shí)觸發(fā)功能實(shí)現(xiàn)
講一下在Python中寫好了一個(gè)腳本之后,怎么自動(dòng)雙擊一個(gè)程序自動(dòng)就跑起來(lái)。以及,怎么在Windows 10中設(shè)計(jì)定期定時(shí)觸發(fā)并跑腳本,有需要的朋友可以參考下2021-09-09