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

Pandas高階用法之?dāng)?shù)據(jù)清洗與高效分析的完整指南

 更新時(shí)間:2025年04月24日 08:50:41   作者:Python_trys  
在數(shù)據(jù)科學(xué)和數(shù)據(jù)分析領(lǐng)域,Pandas無疑是Python生態(tài)系統(tǒng)中最強(qiáng)大的數(shù)據(jù)處理庫之一,本文我們將深入探討Pandas的高階用法,主要是數(shù)據(jù)清洗與高效分析,需要的小伙伴可以參考下

一、前言

在數(shù)據(jù)科學(xué)和數(shù)據(jù)分析領(lǐng)域,Pandas無疑是Python生態(tài)系統(tǒng)中最強(qiáng)大的數(shù)據(jù)處理庫之一。本文將深入探討Pandas的高階用法,重點(diǎn)介紹數(shù)據(jù)清洗和高效分析的技巧,幫助您從Pandas初級(jí)用戶成長為高級(jí)數(shù)據(jù)分析師。

二、Pandas核心數(shù)據(jù)結(jié)構(gòu)回顧

Series與DataFrame

import pandas as pd

# 創(chuàng)建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])

# 創(chuàng)建DataFrame
df = pd.DataFrame({
    'A': 1.,
    'B': pd.Timestamp('20230101'),
    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
    'D': np.array([3] * 4, dtype='int32'),
    'E': pd.Categorical(["test", "train", "test", "train"]),
    'F': 'foo'
})

三、高級(jí)數(shù)據(jù)清洗技巧

3.1 缺失值處理

3.1.1 檢測(cè)缺失值

# 檢測(cè)缺失值
df.isna().sum()

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

3.1.2 處理缺失值

# 刪除缺失值
df.dropna(how='any')  # 任何列有缺失就刪除
df.dropna(subset=['col1', 'col2'])  # 指定列有缺失才刪除

# 填充缺失值
df.fillna(value={'col1': 0, 'col2': 'unknown'})  # 不同列不同填充值
df.fillna(method='ffill')  # 前向填充
df.fillna(method='bfill', limit=2)  # 后向填充,最多填充2個(gè)

# 插值法填充
df.interpolate(method='linear')  # 線性插值
df.interpolate(method='time')  # 時(shí)間序列插值

3.2 異常值處理

3.2.1 檢測(cè)異常值

# 使用描述性統(tǒng)計(jì)
df.describe()

# 使用Z-score方法
from scipy import stats
z_scores = stats.zscore(df['numeric_col'])
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 3)
df_clean = df[filtered_entries]

# 使用IQR方法
Q1 = df['numeric_col'].quantile(0.25)
Q3 = df['numeric_col'].quantile(0.75)
IQR = Q3 - Q1
df_clean = df[~((df['numeric_col'] < (Q1 - 1.5 * IQR)) | (df['numeric_col'] > (Q3 + 1.5 * IQR)))]

3.2.2 處理異常值

# 替換為邊界值
df['numeric_col'] = np.where(df['numeric_col'] > upper_bound, upper_bound, 
                            np.where(df['numeric_col'] < lower_bound, lower_bound, df['numeric_col']))

# 使用分箱處理
df['binned'] = pd.cut(df['numeric_col'], bins=5, labels=False)

3.3 數(shù)據(jù)轉(zhuǎn)換

3.3.1 標(biāo)準(zhǔn)化與歸一化

# Min-Max歸一化
df['normalized'] = (df['col'] - df['col'].min()) / (df['col'].max() - df['col'].min())

# Z-score標(biāo)準(zhǔn)化
df['standardized'] = (df['col'] - df['col'].mean()) / df['col'].std()

3.3.2 類別型數(shù)據(jù)編碼

# One-Hot編碼
pd.get_dummies(df, columns=['categorical_col'])

# Label編碼
from sklearn.preprocessing import LabelEncoder
df['encoded'] = LabelEncoder().fit_transform(df['categorical_col'])

四、高效數(shù)據(jù)分析技巧

4.1 高性能數(shù)據(jù)處理

4.1.1 使用eval()和query()

# eval方法加速計(jì)算
df.eval('new_col = col1 + col2', inplace=True)

# query方法高效過濾
df.query('col1 > col2 & col3 == "value"')

4.1.2 使用category類型節(jié)省內(nèi)存

# 轉(zhuǎn)換category類型
df['category_col'] = df['category_col'].astype('category')

# 查看內(nèi)存使用
df.memory_usage(deep=True)

4.2 高級(jí)分組操作

4.2.1 agg聚合函數(shù)

# 多函數(shù)聚合
df.groupby('group_col').agg({
    'col1': ['mean', 'max', 'min'],
    'col2': lambda x: np.percentile(x, 95)
})

# 命名聚合(Pandas 0.25+)
df.groupby('group_col').agg(
    mean_col1=('col1', 'mean'),
    max_col2=('col2', 'max'),
    custom=('col3', lambda x: x.std() / x.mean())
)

4.2.2 transform和apply

# transform保持原DataFrame形狀
df['group_mean'] = df.groupby('group_col')['value_col'].transform('mean')

# apply靈活應(yīng)用函數(shù)
def custom_func(group):
    return (group - group.mean()) / group.std()

df.groupby('group_col').apply(custom_func)

4.3 時(shí)間序列分析

4.3.1 重采樣

# 降采樣
df.resample('M').mean()  # 按月平均

# 升采樣
df.resample('D').ffill()  # 按天填充

# 自定義重采樣
def custom_resampler(array_like):
    return np.sum(array_like) * 1.5

df.resample('W').apply(custom_resampler)

4.3.2 滾動(dòng)窗口計(jì)算

# 簡單滾動(dòng)平均
df.rolling(window=7).mean()

# 擴(kuò)展窗口
df.expanding().sum()

# 自定義滾動(dòng)函數(shù)
def custom_roll(x):
    return x[-1] * 2 + x[0]

df.rolling(window=3).apply(custom_roll)

五、數(shù)據(jù)可視化集成

5.1 直接繪圖

# 線圖
df.plot.line(x='date_col', y=['col1', 'col2'], figsize=(12, 6))

# 箱線圖
df.plot.box(column=['col1', 'col2', 'col3'])

# 六邊形箱圖
df.plot.hexbin(x='col1', y='col2', gridsize=20)

5.2 高級(jí)可視化技巧

# 使用seaborn集成
import seaborn as sns
sns.pairplot(df, hue='category_col')

# 使用plotly交互式可視化
import plotly.express as px
fig = px.scatter_matrix(df, dimensions=['col1', 'col2', 'col3'], color='category_col')
fig.show()

六、性能優(yōu)化技巧

6.1 使用高效數(shù)據(jù)類型

# 優(yōu)化數(shù)值類型
df['int_col'] = pd.to_numeric(df['int_col'], downcast='integer')
df['float_col'] = pd.to_numeric(df['float_col'], downcast='float')

# 使用布爾類型
df['bool_col'] = df['bool_col'].astype('bool')

6.2 避免鏈?zhǔn)劫x值

# 不好的做法 - 鏈?zhǔn)劫x值
df[df['col'] > 100]['new_col'] = 1  # 可能不會(huì)生效

# 好的做法 - 使用loc
df.loc[df['col'] > 100, 'new_col'] = 1

6.3 使用并行處理

# 使用swifter加速apply
import swifter
df['new_col'] = df['col'].swifter.apply(lambda x: x*2)

# 使用dask處理大數(shù)據(jù)
import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=4)
result = ddf.groupby('group_col').mean().compute()

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

7.1 數(shù)據(jù)準(zhǔn)備

# 讀取數(shù)據(jù)
orders = pd.read_csv('orders.csv', parse_dates=['order_date'])
products = pd.read_csv('products.csv')
customers = pd.read_csv('customers.csv')

# 合并數(shù)據(jù)
merged = pd.merge(orders, products, on='product_id')
merged = pd.merge(merged, customers, on='customer_id')

7.2 RFM分析

# 計(jì)算RFM指標(biāo)
now = pd.to_datetime('today')
rfm = merged.groupby('customer_id').agg({
    'order_date': lambda x: (now - x.max()).days,  # Recency
    'order_id': 'count',  # Frequency
    'total_price': 'sum'  # Monetary
}).rename(columns={
    'order_date': 'recency',
    'order_id': 'frequency',
    'total_price': 'monetary'
})

# RFM評(píng)分
rfm['r_score'] = pd.qcut(rfm['recency'], q=5, labels=[5,4,3,2,1])
rfm['f_score'] = pd.qcut(rfm['frequency'], q=5, labels=[1,2,3,4,5])
rfm['m_score'] = pd.qcut(rfm['monetary'], q=5, labels=[1,2,3,4,5])
rfm['rfm_score'] = rfm['r_score'].astype(str) + rfm['f_score'].astype(str) + rfm['m_score'].astype(str)

# 客戶分群
segment_map = {
    r'[4-5][4-5][4-5]': '高價(jià)值客戶',
    r'[3-5][3-5][3-5]': '潛力客戶',
    r'[1-2][1-2][1-2]': '流失風(fēng)險(xiǎn)客戶',
    r'.*': '一般客戶'
}
rfm['segment'] = rfm['rfm_score'].replace(segment_map, regex=True)

八、總結(jié)

本文全面介紹了Pandas在數(shù)據(jù)清洗和高效分析方面的高階用法,包括:

高級(jí)數(shù)據(jù)清洗技巧:缺失值處理、異常值檢測(cè)與處理、數(shù)據(jù)轉(zhuǎn)換

高效數(shù)據(jù)分析方法:高性能數(shù)據(jù)處理、高級(jí)分組操作、時(shí)間序列分析

數(shù)據(jù)可視化集成:直接繪圖方法和高級(jí)可視化技巧

性能優(yōu)化技巧:數(shù)據(jù)類型優(yōu)化、避免鏈?zhǔn)劫x值、并行處理

實(shí)戰(zhàn)案例:電商數(shù)據(jù)分析中的RFM模型應(yīng)用

掌握這些高階技巧后,您將能夠更加高效地處理和分析各種復(fù)雜的數(shù)據(jù)集,為數(shù)據(jù)驅(qū)動(dòng)的決策提供有力支持。記住,熟練使用Pandas的關(guān)鍵在于不斷實(shí)踐和探索其豐富的功能。

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

相關(guān)文章

  • 詳解Python3之?dāng)?shù)據(jù)指紋MD5校驗(yàn)與對(duì)比

    詳解Python3之?dāng)?shù)據(jù)指紋MD5校驗(yàn)與對(duì)比

    這篇文章主要介紹了Python3之?dāng)?shù)據(jù)指紋MD5校驗(yàn)與對(duì)比,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Numpy 改變數(shù)組維度的幾種方法小結(jié)

    Numpy 改變數(shù)組維度的幾種方法小結(jié)

    今天小編就為大家分享一篇Numpy 改變數(shù)組維度的幾種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Python初學(xué)者常見錯(cuò)誤詳解

    Python初學(xué)者常見錯(cuò)誤詳解

    這篇文章主要介紹了Python初學(xué)者常見錯(cuò)誤詳解,即便是有編程經(jīng)驗(yàn)的程序員,也容易按照固有的思維和語法格式來寫 Python 代碼,需要的朋友可以參考下
    2019-07-07
  • python實(shí)現(xiàn)簡單socket通信的方法

    python實(shí)現(xiàn)簡單socket通信的方法

    這篇文章主要介紹了python實(shí)現(xiàn)簡單socket通信的方法,結(jié)合實(shí)例形式分析了socket通信服務(wù)端與客戶端的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • Python利用request庫實(shí)現(xiàn)翻譯接口

    Python利用request庫實(shí)現(xiàn)翻譯接口

    這篇文章主要為大家詳細(xì)介紹了Python如何利用request庫打造自己的翻譯接口,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • python uv常用命令使用及說明

    python uv常用命令使用及說明

    uv是一個(gè)快速的現(xiàn)代構(gòu)建系統(tǒng)和包管理器,支持虛擬環(huán)境管理、包安裝與卸載、項(xiàng)目構(gòu)建和發(fā)布等功能,旨在比傳統(tǒng)工具更快,更多詳情請(qǐng)參考官方文檔
    2026-01-01
  • python uvloop事件循環(huán)庫使用功能示例探究

    python uvloop事件循環(huán)庫使用功能示例探究

    這篇文章主要為大家介紹了python uvloop事件循環(huán)庫使用功能示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • python使用openpyxl實(shí)現(xiàn)批量調(diào)整字體和樣式

    python使用openpyxl實(shí)現(xiàn)批量調(diào)整字體和樣式

    這篇文章主要介紹了python使用openpyxl實(shí)現(xiàn)批量調(diào)整字體和樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Python基于Streamlit實(shí)現(xiàn)音頻處理示例詳解

    Python基于Streamlit實(shí)現(xiàn)音頻處理示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何基于Streamlit實(shí)現(xiàn)的音頻處理,包含錄音,語音轉(zhuǎn)文本,文件下載和進(jìn)度顯示功能,有需要的小伙伴可以參考一下
    2025-03-03
  • python人工智能tensorflow常用激活函數(shù)Activation?Functions

    python人工智能tensorflow常用激活函數(shù)Activation?Functions

    這篇文章主要為大家介紹了python人工智能tensorflow常用激活函數(shù)Activation?Functions的匯總介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論

嘉义市| 庆安县| 蒙城县| 泸西县| 平潭县| 宕昌县| 丹江口市| 东阿县| 凤城市| 滦南县| 大庆市| 湖北省| 舟山市| 封丘县| 雷山县| 忻城县| 驻马店市| 葵青区| 鹤庆县| 汝阳县| 徐州市| 孟津县| 清水河县| 大渡口区| 通江县| 齐齐哈尔市| 荣成市| 阜阳市| 洪雅县| 鹿邑县| 九寨沟县| 张家界市| 新河县| 濉溪县| 公主岭市| 南开区| 布尔津县| 三台县| 忻城县| 聂荣县| 康马县|