自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

提升效率的十種 Pandas 數(shù)據(jù)操作方法

大數(shù)據(jù) 數(shù)據(jù)分析
無論是數(shù)據(jù)清洗還是探索性數(shù)據(jù)分析,Pandas都能幫你輕松搞定。接下來,我會(huì)分享十個(gè)技巧,讓你在處理數(shù)據(jù)時(shí)更加高效。

大家好!今天我們要聊的是如何使用Pandas庫(kù)來提高數(shù)據(jù)分析的效率。Pandas是一個(gè)強(qiáng)大的Python庫(kù),專門用于數(shù)據(jù)處理和分析。無論是數(shù)據(jù)清洗還是探索性數(shù)據(jù)分析,Pandas都能幫你輕松搞定。接下來,我會(huì)分享十個(gè)技巧,讓你在處理數(shù)據(jù)時(shí)更加高效。

1. 使用 read_csv 的參數(shù)優(yōu)化讀取性能

首先,我們來看看如何優(yōu)化CSV文件的讀取過程。通常情況下,我們會(huì)直接調(diào)用 pd.read_csv() 來加載數(shù)據(jù),但其實(shí)有很多參數(shù)可以用來提高讀取速度或減少內(nèi)存使用。

import pandas as pd

# 假設(shè)我們有一個(gè)大型CSV文件
filename = 'large_dataset.csv'

# 只讀取特定列
df = pd.read_csv(filename, usecols=['Column1', 'Column2'])

# 指定數(shù)據(jù)類型以節(jié)省內(nèi)存
dtypes = {'Column1': str, 'Column2': float}
df = pd.read_csv(filename, dtype=dtypes)

小貼士:通過指定 usecols 參數(shù),我們可以只讀取感興趣的列,這樣不僅可以加快讀取速度,還能避免不必要的內(nèi)存占用。同時(shí),通過設(shè)置 dtype 參數(shù),可以進(jìn)一步減少內(nèi)存消耗。

2. 利用 DataFrame.query() 進(jìn)行高效篩選

當(dāng)我們需要根據(jù)條件篩選數(shù)據(jù)時(shí),query() 方法比傳統(tǒng)的布爾索引更為簡(jiǎn)潔且性能更好。

# 假設(shè) df 是一個(gè)包含用戶信息的數(shù)據(jù)框
# 我們想要篩選出年齡大于30歲且性別為女性的用戶

filtered_df = df.query('age > 30 and gender == "F"')

小貼士:query() 支持簡(jiǎn)單的SQL風(fēng)格查詢語法,使得條件篩選變得更加直觀易懂。而且,它內(nèi)部會(huì)自動(dòng)編譯成高效的C語言實(shí)現(xiàn),所以速度上也有保證。

3. 使用向量化操作替代循環(huán)

Pandas中的許多函數(shù)都是向量化的,即它們可以一次性處理整個(gè)數(shù)組或DataFrame。這比使用Python的for循環(huán)要快得多。

# 計(jì)算所有數(shù)值列的平方值
df['square'] = df.select_dtypes(include='number').apply(lambda x: x ** 2, axis=0)

# 或者更簡(jiǎn)潔地
df['square'] = df[['col1', 'col2']].pow(2)

小貼士:盡量利用Pandas提供的內(nèi)置函數(shù)來進(jìn)行數(shù)據(jù)處理,這樣不僅代碼更簡(jiǎn)潔,執(zhí)行效率也會(huì)更高。避免使用顯式的循環(huán)遍歷每一行或每一列,除非真的有必要。

4. 高效合并數(shù)據(jù):merge vs concat

在整合多個(gè)數(shù)據(jù)源時(shí),選擇正確的合并方法非常重要。

# 合并兩個(gè)數(shù)據(jù)框
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E'], 'value': [4, 5, 6]})

# 使用 merge 按 key 列連接
merged = pd.merge(df1, df2, on='key')

# 使用 concat 沿軸堆疊
stacked = pd.concat([df1, df2], ignore_index=True)

小貼士:merge 適用于按鍵連接不同表,而 concat 更適合于將表沿某個(gè)軸(如行或列)堆疊起來。了解這兩種方法的區(qū)別,可以幫助我們?cè)趯?shí)際操作中做出更好的選擇。

5. 使用 groupby 進(jìn)行高效聚合

groupby 是Pandas中最強(qiáng)大的功能之一,可以讓我們按一個(gè)或多個(gè)鍵對(duì)數(shù)據(jù)進(jìn)行分組,并執(zhí)行各種聚合操作。

# 假設(shè)我們有一個(gè)銷售數(shù)據(jù)集
sales_data = pd.DataFrame({
    'Product': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Region': ['North', 'South', 'North', 'South', 'North', 'South'],
    'Quantity': [100, 150, 200, 250, 300, 350]
})

# 按產(chǎn)品分組并計(jì)算總銷量
total_sales = sales_data.groupby('Product')['Quantity'].sum()

# 按地區(qū)和產(chǎn)品分組并計(jì)算平均銷量
average_sales = sales_data.groupby(['Region', 'Product'])['Quantity'].mean()

小貼士:groupby 結(jié)合聚合函數(shù)(如 sum(), mean(), count() 等)可以非常方便地進(jìn)行數(shù)據(jù)匯總。此外,還可以通過 agg 函數(shù)自定義多種聚合操作。

6. 使用 pivot_table 快速生成透視表

pivot_table 可以幫助我們快速生成透視表,進(jìn)行多維度的數(shù)據(jù)分析。

# 使用 pivot_table 生成透視表
pivot = pd.pivot_table(sales_data,
                       values='Quantity',
                       index=['Region'],
                       columns=['Product'],
                       aggfunc=np.sum,
                       fill_value=0)

print(pivot)

輸出結(jié)果:

Product  A  B  C
Region               
North   100 200 300
South   150 250 350

小貼士:pivot_table 可以通過指定不同的 index, columns 和 values 來生成復(fù)雜的透視表。使用 aggfunc 參數(shù)可以選擇不同的聚合函數(shù)。fill_value 參數(shù)可以用來填充缺失值。

7. 使用 crosstab 快速生成交叉表

crosstab 是一種快速生成交叉表的方法,常用于頻率統(tǒng)計(jì)。

# 使用 crosstab 生成交叉表
cross_tab = pd.crosstab(sales_data['Region'], sales_data['Product'])

print(cross_tab)

輸出結(jié)果:

Product  A  B  C
Region               
North     1  1  1
South     1  1  1

小貼士:crosstab 用于生成兩個(gè)分類變量之間的交叉表,非常適合進(jìn)行頻數(shù)統(tǒng)計(jì)。這對(duì)于初步了解數(shù)據(jù)分布非常有幫助。

8. 使用 isin 進(jìn)行高效篩選

isin 方法可以用于篩選包含特定值的行。

# 假設(shè)我們有一個(gè)包含城市名稱的數(shù)據(jù)框
cities = pd.DataFrame({
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']
})

# 篩選出包含特定城市的行
selected_cities = cities[cities['City'].isin(['New York', 'Chicago'])]

print(selected_cities)

輸出結(jié)果:

       City
0  New York
2   Chicago

小貼士:isin 方法非常適合用于篩選包含特定值的行,尤其當(dāng)這些值較多時(shí),使用這種方法比逐一比較更高效。

9. 使用 apply 自定義函數(shù)處理數(shù)據(jù)

apply 方法允許我們應(yīng)用自定義函數(shù)來處理數(shù)據(jù)框中的每一行或每一列。

# 自定義一個(gè)函數(shù)來處理數(shù)據(jù)
def process_row(row):
    if row['Quantity'] > 200:
        return 'High'
    elif row['Quantity'] > 100:
        return 'Medium'
    else:
        return 'Low'

# 應(yīng)用自定義函數(shù)
sales_data['Sales_Level'] = sales_data.apply(process_row, axis=1)

print(sales_data)

輸出結(jié)果:

  Product Region  Quantity Sales_Level
0       A  North      100         Low
1       A  South      150      Medium
2       B  North      200      Medium
3       B  South      250        High
4       C  North      300        High
5       C  South      350        High

小貼士:apply 方法允許我們靈活地處理數(shù)據(jù),尤其是在需要自定義邏輯的情況下。通過設(shè)置 axis=1,我們可以按行應(yīng)用函數(shù);通過設(shè)置 axis=0,可以按列應(yīng)用函數(shù)。

10. 使用 map 進(jìn)行高效的值映射

map 方法可以用于替換數(shù)據(jù)框中的某些值。

# 假設(shè)我們有一個(gè)包含狀態(tài)代碼的數(shù)據(jù)框
status_codes = pd.DataFrame({
    'Code': ['OK', 'ERROR', 'WARNING', 'UNKNOWN']
})

# 定義一個(gè)映射字典
status_map = {
    'OK': 0,
    'ERROR': 1,
    'WARNING': 2,
    'UNKNOWN': -1
}

# 使用 map 替換值
status_codes['Numeric_Code'] = status_codes['Code'].map(status_map)

print(status_codes)

輸出結(jié)果:

     Code  Numeric_Code
0     OK              0
1  ERROR              1
2  WARNING            2
3 UNKNOWN           -1

小貼士:map 方法非常適合用于替換數(shù)據(jù)框中的某些值。通過定義一個(gè)映射字典,可以非常方便地進(jìn)行值的替換。

實(shí)戰(zhàn)案例分析:銷售數(shù)據(jù)分析

假設(shè)我們有一個(gè)銷售數(shù)據(jù)集,包含以下列:Product(產(chǎn)品名稱)、Region(地區(qū))、Quantity(銷量)。我們的目標(biāo)是分析每個(gè)地區(qū)的銷售情況,并找出最暢銷的產(chǎn)品。

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

import pandas as pd
import numpy as np

# 創(chuàng)建示例數(shù)據(jù)
sales_data = pd.DataFrame({
    'Product': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Region': ['North', 'South', 'North', 'South', 'North', 'South'],
    'Quantity': [100, 150, 200, 250, 300, 350]
})

數(shù)據(jù)分析

(1) 按地區(qū)計(jì)算總銷量:

# 按地區(qū)計(jì)算總銷量
total_sales_by_region = sales_data.groupby('Region')['Quantity'].sum()

print(total_sales_by_region)

輸出結(jié)果:

Region
North    600
South    750
Name: Quantity, dtype: int64

(2) 按地區(qū)和產(chǎn)品計(jì)算平均銷量:

# 按地區(qū)和產(chǎn)品計(jì)算平均銷量
average_sales_by_region_product = sales_data.groupby(['Region', 'Product'])['Quantity'].mean()

print(average_sales_by_region_product)

輸出結(jié)果:

Region  Product
North   A          100.0
        B          200.0
South   A          150.0
        C          350.0
Name: Quantity, dtype: float64

(3) 找出每個(gè)地區(qū)的最暢銷產(chǎn)品:

# 找出每個(gè)地區(qū)的最暢銷產(chǎn)品
best_selling_products = sales_data.groupby(['Region', 'Product'])['Quantity'].sum().reset_index()
best_selling_products = best_selling_products.sort_values(by=['Region', 'Quantity'], ascending=[True, False])

print(best_selling_products)

輸出結(jié)果:

   Region Product  Quantity
0   North       C        300
1   North       B        200
2   North       A        100
3  South       C        350
4  South       B        250
5  South       A        150

總結(jié)

通過上述十個(gè)技巧,我們可以顯著提高使用Pandas進(jìn)行數(shù)據(jù)分析的效率。從優(yōu)化數(shù)據(jù)讀取、高效篩選、向量化操作到數(shù)據(jù)聚合和合并,每一步都能幫助我們更好地處理和理解數(shù)據(jù)。希望這些技巧能對(duì)你在實(shí)際工作中有所幫助。

責(zé)任編輯:趙寧寧 來源: 手把手PythonAI編程
相關(guān)推薦

2024-07-03 15:39:56

2024-08-08 08:25:16

2022-07-11 13:30:08

Pandas數(shù)據(jù)編碼代碼

2022-04-20 15:10:55

pandas編碼函數(shù)

2023-03-13 14:58:40

2013-08-23 09:13:44

2013-08-23 09:34:37

2010-09-13 17:17:04

2022-07-28 16:34:16

勒索軟件惡意軟件

2010-09-30 16:10:30

2023-04-13 14:54:00

云存儲(chǔ)云計(jì)算

2010-05-25 09:44:03

2022-07-04 07:41:53

接口數(shù)據(jù)安全

2024-06-25 11:16:17

2022-08-26 16:21:47

數(shù)據(jù)分析工具運(yùn)營(yíng)

2013-10-12 15:36:54

2024-04-26 11:18:57

人工智能風(fēng)險(xiǎn)網(wǎng)絡(luò)安全

2024-07-09 15:46:56

2013-12-13 10:02:47

2009-12-25 14:45:22

Windows 7系統(tǒng)定制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)