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

Pandas中數(shù)據(jù)清洗與高效分析全攻略

 更新時(shí)間:2025年05月22日 08:03:32   作者:Python_trys  
在數(shù)據(jù)科學(xué)和數(shù)據(jù)分析領(lǐng)域,Pandas無(wú)疑是Python生態(tài)中最強(qiáng)大的數(shù)據(jù)處理庫(kù)之一,本文將深入探討Pandas的高階用法,聚焦數(shù)據(jù)清洗和高效分析兩大核心場(chǎng)景,感興趣的小伙伴可以了解下

前言

在數(shù)據(jù)科學(xué)和數(shù)據(jù)分析領(lǐng)域,Pandas無(wú)疑是Python生態(tài)中最強(qiáng)大的數(shù)據(jù)處理庫(kù)之一。然而,很多開發(fā)者僅停留在基礎(chǔ)的read_csv和groupby操作上,未能充分發(fā)揮Pandas的真正威力。本文將深入探討Pandas的高階用法,聚焦數(shù)據(jù)清洗和高效分析兩大核心場(chǎng)景,帶你解鎖Pandas的進(jìn)階技能!

一、高效數(shù)據(jù)讀取與初步探索

1.1 智能讀取大數(shù)據(jù)集

import pandas as pd

# 分塊讀取大數(shù)據(jù)集
chunk_iter = pd.read_csv('large_dataset.csv', chunksize=100000)
for chunk in chunk_iter:
    process(chunk)  # 自定義處理函數(shù)

# 只讀取需要的列
cols = ['id', 'name', 'value']
df = pd.read_csv('data.csv', usecols=cols)

# 指定數(shù)據(jù)類型減少內(nèi)存占用
dtypes = {'id': 'int32', 'price': 'float32'}
df = pd.read_csv('data.csv', dtype=dtypes)

1.2 數(shù)據(jù)概覽高階技巧

# 顯示所有列的統(tǒng)計(jì)信息(包括非數(shù)值列)
df.describe(include='all')

# 檢查內(nèi)存使用情況
df.info(memory_usage='deep')
# 唯一值及其計(jì)數(shù)的高級(jí)展示
for col in df.select_dtypes(include=['object']).columns:
    print(f"\n{col}的值分布:")
    print(df[col].value_counts(dropna=False).head(10))

二、高級(jí)數(shù)據(jù)清洗技術(shù)

2.1 智能處理缺失值

# 可視化缺失值
import missingno as msno
msno.matrix(df)

# 基于規(guī)則填充缺失值
df['salary'] = df.groupby('department')['salary'].apply(
    lambda x: x.fillna(x.mean())
)

# 創(chuàng)建缺失值指示特征
df['age_missing'] = df['age'].isna().astype(int)

2.2 異常值檢測(cè)與處理

# 使用IQR方法檢測(cè)異常值
def detect_outliers(df, col):
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    return ~df[col].between(lower_bound, upper_bound)

outliers = detect_outliers(df, 'price')
df['price_cleaned'] = np.where(outliers, np.nan, df['price'])

# 使用Z-score處理異常值
from scipy import stats
df['z_score'] = np.abs(stats.zscore(df['value']))
df['value_cleaned'] = np.where(df['z_score'] > 3, np.nan, df['value'])

2.3 高級(jí)字符串處理

# 使用正則表達(dá)式提取信息
df['phone_area'] = df['phone'].str.extract(r'\((\d{3})\)')

# 向量化的字符串操作
df['name'] = df['first_name'].str.cat(df['last_name'], sep=' ')

# 使用fuzzywuzzy進(jìn)行模糊匹配
from fuzzywuzzy import fuzz
df['similarity'] = df.apply(
    lambda x: fuzz.ratio(x['name1'], x['name2']), axis=1
)

三、高效數(shù)據(jù)轉(zhuǎn)換技巧

3.1 高級(jí)分組聚合

# 同時(shí)計(jì)算多個(gè)聚合函數(shù)
agg_funcs = {
    'sales': ['sum', 'mean', 'max'],
    'profit': lambda x: (x > 0).mean()  # 盈利比例
}
result = df.groupby('region').agg(agg_funcs)

# 使用transform保持原始DataFrame形狀
df['dept_avg_salary'] = df.groupby('department')['salary'].transform('mean')

# 使用pivot_table進(jìn)行透視
pd.pivot_table(df, values='sales', index='region',
               columns='quarter', aggfunc=np.sum,
               margins=True, margins_name='總計(jì)')

3.2 高性能數(shù)據(jù)合并

# 基于索引的快速合并
df1.join(df2, how='left')

# 使用merge的indicator參數(shù)跟蹤合并來(lái)源
pd.merge(df1, df2, on='key', how='outer', indicator=True)

# 使用concat進(jìn)行軸向合并
pd.concat([df1, df2], axis=1, keys=['2022', '2023'])

3.3 時(shí)間序列高級(jí)處理

# 重采樣與滾動(dòng)窗口
df.set_index('date').resample('W').mean()  # 按周重采樣
df.rolling(window='30D').mean()  # 30天滾動(dòng)平均

# 處理時(shí)區(qū)
df['timestamp'] = df['timestamp'].dt.tz_localize('UTC').dt.tz_convert('Asia/Shanghai')

# 時(shí)間特征工程
df['hour'] = df['timestamp'].dt.hour
df['is_weekend'] = df['timestamp'].dt.dayofweek >= 5

四、內(nèi)存優(yōu)化與性能提升

4.1 數(shù)據(jù)類型優(yōu)化

# 自動(dòng)優(yōu)化數(shù)據(jù)類型
def optimize_dtypes(df):
    for col in df.columns:
        col_type = df[col].dtype
        
        if col_type == 'object':
            num_unique = df[col].nunique()
            if num_unique / len(df) < 0.5:
                df[col] = df[col].astype('category')
                
        elif col_type == 'float64':
            df[col] = pd.to_numeric(df[col], downcast='float')
            
        elif col_type == 'int64':
            df[col] = pd.to_numeric(df[col], downcast='integer')
    
    return df

???????df = optimize_dtypes(df)

4.2 并行處理加速

# 使用swifter加速apply操作
import swifter
df['new_col'] = df['text'].swifter.apply(process_text)

# 使用modin替代pandas實(shí)現(xiàn)并行處理
import modin.pandas as mpd
df = mpd.read_csv('large_file.csv')

4.3 高效迭代方法對(duì)比

# 各種迭代方法的性能比較
def iterrows_example(df):
    for index, row in df.iterrows():
        process(row)

def itertuples_example(df):
    for row in df.itertuples():
        process(row)

def vectorized_example(df):
    df['new_col'] = df['col1'] + df['col2']
    
# 向量化操作通常比迭代快100-1000倍

五、實(shí)戰(zhàn)案例:電商數(shù)據(jù)分析

# 1. 數(shù)據(jù)加載與初步清洗
df = pd.read_csv('ecommerce.csv', parse_dates=['order_date'])
df = df[df['order_amount'] > 0]  # 過(guò)濾無(wú)效訂單

# 2. RFM分析
snapshot_date = df['order_date'].max() + pd.Timedelta(days=1)
rfm = df.groupby('customer_id').agg({
    'order_date': lambda x: (snapshot_date - x.max()).days,
    'order_id': 'count',
    'order_amount': 'sum'
})
rfm.columns = ['recency', 'frequency', 'monetary']

# 3. RFM分箱與評(píng)分
rfm['R_score'] = pd.qcut(rfm['recency'], 5, labels=[5,4,3,2,1])
rfm['F_score'] = pd.qcut(rfm['frequency'], 5, labels=[1,2,3,4,5])
rfm['M_score'] = pd.qcut(rfm['monetary'], 5, labels=[1,2,3,4,5])
rfm['RFM_score'] = rfm[['R_score','F_score','M_score']].sum(axis=1)

# 4. 客戶分層
seg_map = {
    r'[12-15]': '高價(jià)值客戶',
    r'[9-11]': '潛力客戶',
    r'[6-8]': '一般客戶',
    r'[3-5]': '流失風(fēng)險(xiǎn)客戶'
}
rfm['segment'] = rfm['RFM_score'].astype('str').replace(seg_map, regex=True)

六、Pandas性能優(yōu)化黃金法則

避免循環(huán):盡量使用向量化操作和內(nèi)置函數(shù)

選擇正確的數(shù)據(jù)類型:category類型可以大幅減少內(nèi)存使用

使用查詢優(yōu)化:.query()方法通常比布爾索引更快

合理使用索引:設(shè)置索引可以加速查詢和合并操作

分批處理大數(shù)據(jù):使用chunksize參數(shù)處理無(wú)法一次性加載的數(shù)據(jù)

利用eval和query:對(duì)于復(fù)雜表達(dá)式,可以顯著提高性能

df.eval('result = (col1 + col2) / col3', inplace=True)

結(jié)語(yǔ)

Pandas的高階功能可以讓你在數(shù)據(jù)清洗和分析工作中事半功倍。本文介紹的技術(shù)涵蓋了從數(shù)據(jù)讀取、清洗、轉(zhuǎn)換到性能優(yōu)化的全流程高級(jí)操作。掌握這些技巧后,你將能夠處理更復(fù)雜的數(shù)據(jù)分析任務(wù),并以更高的效率完成工作。

記住,熟練使用Pandas的關(guān)鍵在于理解其底層設(shè)計(jì)原理(如向量化操作)和不斷實(shí)踐。建議讀者將本文中的示例代碼應(yīng)用到自己的項(xiàng)目中,逐步掌握這些高階技巧。

到此這篇關(guān)于Pandas高階用法之?dāng)?shù)據(jù)清洗與高效分析全攻略的文章就介紹到這了,更多相關(guān)Pandas數(shù)據(jù)清洗與分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python基礎(chǔ)教程之udp端口掃描

    python基礎(chǔ)教程之udp端口掃描

    開發(fā)一個(gè)程序,用于獲取局域網(wǎng)中開啟snmp服務(wù)的主機(jī)ip地址列表,并寫入相應(yīng)文件以便其它程序使用。下面是實(shí)現(xiàn)方法
    2014-02-02
  • 使用Filter過(guò)濾python中的日志輸出的實(shí)現(xiàn)方法

    使用Filter過(guò)濾python中的日志輸出的實(shí)現(xiàn)方法

    這篇文章主要介紹了使用Filter過(guò)濾python中的日志輸出,本文給大家分享幾種方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(三)

    python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)(三)

    這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)之神經(jīng)網(wǎng)絡(luò)第三篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python中的列表知識(shí)點(diǎn)匯總

    Python中的列表知識(shí)點(diǎn)匯總

    這篇文章主要總結(jié)了一些Python中的列表的知識(shí)點(diǎn),來(lái)自于IBM官網(wǎng)技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • python 檢查文件mime類型的方法

    python 檢查文件mime類型的方法

    今天小編就為大家分享一篇python 檢查文件mime類型的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 利用Python函數(shù)實(shí)現(xiàn)一個(gè)萬(wàn)歷表完整示例

    利用Python函數(shù)實(shí)現(xiàn)一個(gè)萬(wàn)歷表完整示例

    這篇文章主要給大家介紹了關(guān)于如何利用Python函數(shù)實(shí)現(xiàn)一個(gè)萬(wàn)歷表的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 人工智能學(xué)習(xí)Pytorch進(jìn)階操作教程

    人工智能學(xué)習(xí)Pytorch進(jìn)階操作教程

    這篇文章主要為大家介紹了人工智能學(xué)習(xí)Pytorch進(jìn)階操作的詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Python入門篇之列表和元組

    Python入門篇之列表和元組

    Python包含6種內(nèi)建序列:列表、元組、字符串、Unicode字符串、buffer對(duì)象、xrange對(duì)象。本篇主要討論最常用的兩種類型:列表、元組
    2014-10-10
  • Python進(jìn)行數(shù)據(jù)分析的5大常見(jiàn)錯(cuò)誤與解決

    Python進(jìn)行數(shù)據(jù)分析的5大常見(jiàn)錯(cuò)誤與解決

    數(shù)據(jù)分析已成為現(xiàn)代商業(yè)決策和科學(xué)研究中不可或缺的一部分,而Python憑借其強(qiáng)大的生態(tài)系統(tǒng)和易用性,成為了數(shù)據(jù)分析師的首選工具,本文將深入剖析Python數(shù)據(jù)分析中最危險(xiǎn)的5大禁忌,大家可以參考一下
    2025-06-06
  • Python中的Xpath和lxml庫(kù)的使用詳解

    Python中的Xpath和lxml庫(kù)的使用詳解

    這篇文章主要介紹了Python中的Xpath和lxml庫(kù)的使用詳解,XPath即 XML路徑語(yǔ)言,它是一門在 XML 文檔中查找信息的語(yǔ)言,最初被用來(lái)搜尋 XML 文檔,同時(shí)它也適用于搜索 HTML 文檔,因此,在爬蟲過(guò)程中可以使用 XPath 來(lái)提取相應(yīng)的數(shù)據(jù),需要的朋友可以參考下
    2023-12-12

最新評(píng)論

班玛县| 西畴县| 荃湾区| 新蔡县| 庆安县| 青冈县| 松原市| 新泰市| 资阳市| 五家渠市| 盱眙县| 井研县| 保康县| 吉隆县| 连南| 井陉县| 额济纳旗| 永平县| 城步| 曲麻莱县| 巍山| 东乡族自治县| 林口县| 墨脱县| 蚌埠市| 祁门县| 中江县| 嘉禾县| 将乐县| 工布江达县| 筠连县| 远安县| 徐汇区| 广东省| 横山县| 景谷| 长汀县| 廉江市| 保山市| 泰顺县| 大埔区|