深入探討Pandas數(shù)據(jù)清洗與高效分析
前言
Pandas 是 Python 中最強(qiáng)大的數(shù)據(jù)處理庫之一,廣泛應(yīng)用于數(shù)據(jù)分析、統(tǒng)計(jì)建模和科學(xué)計(jì)算領(lǐng)域。對(duì)于數(shù)據(jù)分析師而言,掌握 Pandas 的基本用法固然重要,但真正發(fā)揮其強(qiáng)大功能的是對(duì)高級(jí)技巧的運(yùn)用。本文將深入探討 Pandas 的高階用法,包括數(shù)據(jù)清洗、高效的數(shù)據(jù)操作以及與機(jī)器學(xué)習(xí)結(jié)合的應(yīng)用。
一、Pandas高級(jí)數(shù)據(jù)清洗
1、處理缺失值
在實(shí)際數(shù)據(jù)分析任務(wù)中,缺失值是不可避免的問題。Pandas 提供了多種方法來檢測(cè)和處理缺失值:檢測(cè)缺失值:使用 isna() 或 notna() 函數(shù)可以快速檢測(cè) DataFrame 中的缺失值。
import pandas as pd # 創(chuàng)建示例數(shù)據(jù) df = pd.DataFrame({ 'A': [1, 2, None], 'B': [4, None, 6], 'C': [None, 7, 8]}) # 檢測(cè)缺失值 print(df.isna()) # 輸出布爾 DataFrame 標(biāo)記缺失值
刪除包含缺失值的行或列:可以使用 dropna() 方法刪除包含任何缺失值的行,或者使用 fillna() 填充缺失值。
# 刪除行中的缺失值 df_cleaned = df.dropna() # 使用均值填充缺失值 mean_fill = df['A'].mean() df_filled = df.fillna(mean_fill)
2、處理重復(fù)值
在某些情況下,數(shù)據(jù)中可能包含重復(fù)的記錄。Pandas 提供了 drop_duplicates() 方法來刪除重復(fù)項(xiàng)。
# 創(chuàng)建示例數(shù)據(jù)(包含重復(fù)行) df_dup = pd.DataFrame({ 'A': [1, 2, 1], 'B': [3, 4, 3], 'C': [5, 6, 5]}) # 刪除重復(fù)值,保留第一次出現(xiàn)的記錄 df_unique = df_dup.drop_duplicates(keep='first')
二、高級(jí)數(shù)據(jù)操作
合并與連接
Pandas 提供了強(qiáng)大的數(shù)據(jù)合并功能,可以將多個(gè) DataFrame 按照指定的方式進(jìn)行合并。
按列合并:使用 merge() 方法根據(jù)一個(gè)或多個(gè)鍵合并兩個(gè) DataFrame。
import numpy as np # 創(chuàng)建示例數(shù)據(jù) df1 = pd.DataFrame({ 'key': ['A', 'B', 'C'], 'value': [1, 2, 3]}) df2 = pd.DataFrame({ 'key': ['A', 'B', 'D'], 'other_value': [4, 5, 6]}) # 按 "key" 列合并 merged_df = df1.merge(df2, on='key', how='outer') print(merged_df)
按索引連接:使用 concat() 方法可以將多個(gè) DataFrame 按照行或列進(jìn)行拼接。
# 垂直拼接(按行) df_vertical = pd.concat([df1, df2], axis=0) # 水平拼接(按列) df_horizontal = pd.concat([df1, df2[['key', 'other_value']]], axis=1)
三、時(shí)間序列數(shù)據(jù)處理
Pandas 對(duì)時(shí)間序列數(shù)據(jù)的處理非常高效,特別是使用 DatetimeIndex 進(jìn)行日期時(shí)間操作。
# 創(chuàng)建示例時(shí)間序列數(shù)據(jù) index = pd.date_range('2023-01-01', periods=7, freq='D') df_time = pd.DataFrame({ 'value': np.random.rand(7)},index=index) # 時(shí)間序列重采樣(例如,將分鐘級(jí)數(shù)據(jù)轉(zhuǎn)換為小時(shí)級(jí)) df_resampled = df_time.resample('H').mean()
四、Pandas的高級(jí)性能優(yōu)化
在處理大數(shù)據(jù)集時(shí),代碼的效率變得尤為重要。以下是一些提高 Pandas 性能的技巧:
1、避免循環(huán)操作:盡量減少使用 for 循環(huán),改用矢量化運(yùn)算。例如:
# 生成數(shù)據(jù) df = pd.DataFrame([[1,2],[1,2],[3,4]],columns=['a','b']) # 低效的循環(huán) for i in range(len(df)): df['c'][i] = df['a'][i] + df['b'][i] # 高效的矢量化操作 df['c'] = df['a'] + df['b']
2、使用 where 和 mask 進(jìn)行條件判斷
# 替換某些值 df['c'] = df['c'].where(df['c'] > 0, -df['col3'])
3、優(yōu)化內(nèi)存占用 使用 dtype 轉(zhuǎn)換來減少內(nèi)存占用:
# 將整數(shù)列轉(zhuǎn)換為更小的類型(例如,從 int64 到 uint8) df['c'] = df['c'].astype('uint8')
五、Pandas與機(jī)器學(xué)習(xí)結(jié)合
1、數(shù)據(jù)標(biāo)準(zhǔn)化
在機(jī)器學(xué)習(xí)中,通常需要將數(shù)據(jù)歸一化或標(biāo)準(zhǔn)化。使用 Pandas 可以輕松實(shí)現(xiàn):
from sklearn.preprocessing import StandardScaler # 標(biāo)準(zhǔn)化處理 scaler = StandardScaler() df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
2、特征工程
特征工程是機(jī)器學(xué)習(xí)中非常關(guān)鍵的一環(huán)。Pandas 可以幫助我們快速生成和轉(zhuǎn)換特征:
# 數(shù)據(jù) index = pd.date_range('2025-3-1',periods=7,freq='D') data = {'a':[1,2,3,4,5,1,1], 'text':['Hello','first','world','black','star','table','rose']} df = pd.DataFrame(data,index=index) # 提取時(shí)間特征(例如,從日期中提取星期幾) df['day_of_week'] = df.index.dayofweek # 文本數(shù)據(jù)處理(例如,詞袋模型) from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() text_features = pd.DataFrame(vectorizer.fit_transform(df['text']).toarray(), columns=vectorizer.get_feature_names_out()) text_features.index = index df_processed = pd.concat([df, text_features], axis=1)
六、總結(jié)
Pandas 的高階用法涵蓋了從數(shù)據(jù)清洗到高效數(shù)據(jù)分析的方方面面。通過掌握這些技巧,我們可以更高效地處理復(fù)雜的數(shù)據(jù)問題,并為后續(xù)的機(jī)器學(xué)習(xí)或其他分析任務(wù)做好準(zhǔn)備。
對(duì)于初學(xué)者來說,熟練使用 Pandas 需要不斷的實(shí)踐和積累。隨著對(duì)工具理解的深入,數(shù)據(jù)分析效率和結(jié)果質(zhì)量都會(huì)得到顯著提升。
以上就是深入探討Pandas數(shù)據(jù)清洗與高效分析的詳細(xì)內(nèi)容,更多關(guān)于Pandas數(shù)據(jù)清洗與高效分析的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python?Traceback(most?recent?call?last)報(bào)錯(cuò)信息:示例解讀
這篇文章主要介紹了Python?Traceback(most?recent?call?last)報(bào)錯(cuò)信息:示例解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python爬蟲requests模塊之URL地址中的參數(shù)解讀
這篇文章主要介紹了Python爬蟲requests模塊之URL地址中的參數(shù)解讀,在你拿到數(shù)據(jù)所在的url地址之后,發(fā)送網(wǎng)絡(luò)請(qǐng)求時(shí),請(qǐng)求的url中包含兩種地址參數(shù):查詢參數(shù)和請(qǐng)求參數(shù),需要的朋友可以參考下2023-08-08python實(shí)現(xiàn)讀取excel表格詳解方法
python操作excel主要用到xlrd和xlwt兩個(gè)庫,xlrd讀取表格數(shù)據(jù),支持xlsx和xls格式的excel表格;xlwt寫入excel表格數(shù)據(jù)2022-07-07pytorch加載的cifar10數(shù)據(jù)集過程詳解
這篇文章主要介紹了pytorch加載的cifar10數(shù)據(jù)集,到底有沒有經(jīng)過歸一化,本文對(duì)這一問題給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11python實(shí)現(xiàn)網(wǎng)頁錄音效果
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)網(wǎng)頁錄音效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10Python實(shí)現(xiàn)強(qiáng)制復(fù)制粘貼的示例詳解
下個(gè)文檔還要馬內(nèi)?還好我會(huì)Python,本文就來教大家來一手如何利用Python實(shí)現(xiàn)強(qiáng)制復(fù)制粘貼。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12PyMySQL實(shí)現(xiàn)增刪查改的簡(jiǎn)單使用
這篇文章主要介紹了PyMySQL實(shí)現(xiàn)增刪查改的簡(jiǎn)單使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05python實(shí)現(xiàn)TCP文件接收發(fā)送
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)TCP文件接收發(fā)送,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09