欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、前言

在數(shù)據(jù)科學和數(shù)據(jù)分析領(lǐng)域,Pandas無疑是Python生態(tài)系統(tǒng)中最強大的數(shù)據(jù)處理庫之一。本文將深入探討Pandas的高階用法,重點介紹數(shù)據(jù)清洗和高效分析的技巧,幫助您從Pandas初級用戶成長為高級數(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'
})

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

3.1 缺失值處理

3.1.1 檢測缺失值

# 檢測缺失值
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個

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

3.2 異常值處理

3.2.1 檢測異常值

# 使用描述性統(tǒng)計
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 標準化與歸一化

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

# Z-score標準化
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方法加速計算
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 高級分組操作

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 時間序列分析

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 滾動窗口計算

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

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

# 自定義滾動函數(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 高級可視化技巧

# 使用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 避免鏈式賦值

# 不好的做法 - 鏈式賦值
df[df['col'] > 100]['new_col'] = 1  # 可能不會生效

# 好的做法 - 使用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()

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

7.1 數(shù)據(jù)準備

# 讀取數(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分析

# 計算RFM指標
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評分
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]': '高價值客戶',
    r'[3-5][3-5][3-5]': '潛力客戶',
    r'[1-2][1-2][1-2]': '流失風險客戶',
    r'.*': '一般客戶'
}
rfm['segment'] = rfm['rfm_score'].replace(segment_map, regex=True)

八、總結(jié)

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

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

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

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

性能優(yōu)化技巧:數(shù)據(jù)類型優(yōu)化、避免鏈式賦值、并行處理

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

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

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

相關(guān)文章

  • python字符串連接方式匯總

    python字符串連接方式匯總

    這篇文章主要介紹了python字符串連接方式匯總,很實用的基礎(chǔ)技巧匯總,需要的朋友可以參考下
    2014-08-08
  • 對python 調(diào)用類屬性的方法詳解

    對python 調(diào)用類屬性的方法詳解

    今天小編就為大家分享一篇對python 調(diào)用類屬性的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python實現(xiàn)帶界面的井字棋小游戲

    python實現(xiàn)帶界面的井字棋小游戲

    這篇文章我們主要介紹的是python實現(xiàn)帶界面的井字棋小游戲,從安裝tkinter開始,然后初始化窗口,定義按鈕即查找獲勝條件,想具體了解的小伙伴可以參考下文,附有詳細代碼
    2021-09-09
  • python使用遞歸解決全排列數(shù)字示例

    python使用遞歸解決全排列數(shù)字示例

    有1,2,3,4這4個數(shù)字,能組成多少個互不相同且無重復(fù)數(shù)字的三位數(shù),下面是二種解決示例,需要的朋友可以參考下
    2014-02-02
  • 對Python中的條件判斷、循環(huán)以及循環(huán)的終止方法詳解

    對Python中的條件判斷、循環(huán)以及循環(huán)的終止方法詳解

    今天小編就為大家分享一篇對Python中的條件判斷、循環(huán)以及循環(huán)的終止方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • Python獲取與處理文件路徑/目錄路徑實例代碼

    Python獲取與處理文件路徑/目錄路徑實例代碼

    我們在用python進行數(shù)據(jù)處理時往往需要將文件中的數(shù)據(jù)取出來做一些處理,下面這篇文章主要給大家介紹了關(guān)于Python獲取與處理文件路徑/目錄路徑的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • Python檢測一個對象是否為字符串類的方法

    Python檢測一個對象是否為字符串類的方法

    這篇文章主要介紹了Python檢測一個對象是否為字符串類的方法,即檢測是一個對象是否是字符串對象,本文還講解了一個有趣的判斷方法,需要的朋友可以參考下
    2015-05-05
  • 使用Python操作Excel中的各項頁面設(shè)置功能

    使用Python操作Excel中的各項頁面設(shè)置功能

    在使用Excel進行數(shù)據(jù)分析或報告制作時,頁面設(shè)置是確保最終輸出效果專業(yè)、美觀的關(guān)鍵步驟,合理的頁面設(shè)置不僅能夠優(yōu)化打印效果,還能提升數(shù)據(jù)的可讀性,本文將詳細介紹如何使用Python操作Excel中的各項頁面設(shè)置功能,需要的朋友可以參考下
    2024-08-08
  • anaconda的安裝和配置環(huán)境及導(dǎo)入pycharm的方法

    anaconda的安裝和配置環(huán)境及導(dǎo)入pycharm的方法

    這篇文章主要介紹了anaconda的安裝和配置環(huán)境及導(dǎo)入pycharm的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python實現(xiàn)一個優(yōu)先級隊列的方法

    Python實現(xiàn)一個優(yōu)先級隊列的方法

    這篇文章主要介紹了Python實現(xiàn)一個優(yōu)先級隊列的方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07

最新評論