【AI Study】第四天,Pandas(6)- 性能優化

文章概要

本文詳細介紹 Pandas 的性能優化技術,包括:

  • 內存優化
  • 計算優化
  • 大數據處理
  • 實際應用示例

內存優化

數據類型優化

# 查看數據類型
df.dtypes# 查看內存使用情況
df.memory_usage(deep=True)# 優化數值類型
# 將 float64 轉換為 float32
df['float_column'] = df['float_column'].astype('float32')# 將 int64 轉換為 int32 或 int16
df['int_column'] = df['int_column'].astype('int32')# 優化分類數據
df['category_column'] = df['category_column'].astype('category')# 優化日期時間
df['datetime_column'] = pd.to_datetime(df['datetime_column'])

內存使用分析

# 查看每列的內存使用
def memory_usage_by_column(df):return df.memory_usage(deep=True).sort_values(ascending=False)# 查看數據類型分布
def dtype_distribution(df):return df.dtypes.value_counts()# 查看空值比例
def null_ratio(df):return df.isnull().sum() / len(df)# 內存使用分析報告
def memory_analysis_report(df):print("內存使用情況:")print(memory_usage_by_column(df))print("\n數據類型分布:")print(dtype_distribution(df))print("\n空值比例:")print(null_ratio(df))

內存清理

# 刪除不需要的列
df = df.drop(['unused_column1', 'unused_column2'], axis=1)# 刪除重復行
df = df.drop_duplicates()# 重置索引
df = df.reset_index(drop=True)# 清理內存
import gc
gc.collect()# 使用 inplace 操作
df.dropna(inplace=True)
df.fillna(0, inplace=True)

計算優化

向量化操作

# 避免循環,使用向量化操作
# 不推薦
for i in range(len(df)):df.loc[i, 'new_column'] = df.loc[i, 'column1'] + df.loc[i, 'column2']# 推薦
df['new_column'] = df['column1'] + df['column2']# 使用 apply 而不是循環
# 不推薦
for i in range(len(df)):df.loc[i, 'new_column'] = some_function(df.loc[i, 'column'])# 推薦
df['new_column'] = df['column'].apply(some_function)# 使用向量化函數
df['new_column'] = np.where(df['column'] > 0, 'positive', 'negative')

并行計算

# 使用 multiprocessing 進行并行計算
from multiprocessing import Pooldef process_chunk(chunk):# 處理數據塊的函數return chunk.apply(some_function)def parallel_apply(df, func, n_cores=4):# 將數據分成多個塊chunks = np.array_split(df, n_cores)# 創建進程池pool = Pool(n_cores)# 并行處理results = pool.map(process_chunk, chunks)# 合并結果return pd.concat(results)# 使用示例
result = parallel_apply(df, some_function)

分塊處理

# 分塊讀取大文件
chunk_size = 10000
chunks = pd.read_csv('large_file.csv', chunksize=chunk_size)# 分塊處理
results = []
for chunk in chunks:# 處理每個數據塊processed_chunk = process_chunk(chunk)results.append(processed_chunk)# 合并結果
final_result = pd.concat(results)# 使用迭代器處理大文件
def process_large_file(file_path, chunk_size=10000):for chunk in pd.read_csv(file_path, chunksize=chunk_size):# 處理每個數據塊yield process_chunk(chunk)

大數據處理

分塊讀取

# 分塊讀取 CSV 文件
def read_csv_in_chunks(file_path, chunk_size=10000):return pd.read_csv(file_path, chunksize=chunk_size)# 分塊讀取 Excel 文件
def read_excel_in_chunks(file_path, sheet_name=0, chunk_size=10000):return pd.read_excel(file_path, sheet_name=sheet_name, chunksize=chunk_size)# 分塊讀取 SQL 查詢結果
def read_sql_in_chunks(query, connection, chunk_size=10000):return pd.read_sql(query, connection, chunksize=chunk_size)

增量處理

# 增量處理數據
def incremental_processing(df, window_size=1000):results = []for i in range(0, len(df), window_size):chunk = df.iloc[i:i+window_size]# 處理數據塊processed_chunk = process_chunk(chunk)results.append(processed_chunk)return pd.concat(results)# 增量更新
def incremental_update(df, new_data, key_column):# 合并新數據df = pd.concat([df, new_data])# 刪除重復項df = df.drop_duplicates(subset=[key_column], keep='last')return df

分布式處理

# 使用 Dask 進行分布式處理
import dask.dataframe as dd# 創建 Dask DataFrame
ddf = dd.from_pandas(df, npartitions=4)# 分布式計算
result = ddf.groupby('column').mean().compute()# 使用 PySpark 進行分布式處理
from pyspark.sql import SparkSession# 創建 SparkSession
spark = SparkSession.builder.getOrCreate()# 將 Pandas DataFrame 轉換為 Spark DataFrame
spark_df = spark.createDataFrame(df)# 分布式計算
result = spark_df.groupBy('column').mean()

實際應用示例

示例1:大數據集處理優化

# 創建示例數據
import numpy as np
import pandas as pd# 生成大數據集
n_rows = 1000000
df = pd.DataFrame({'id': range(n_rows),'value1': np.random.randn(n_rows),'value2': np.random.randn(n_rows),'category': np.random.choice(['A', 'B', 'C', 'D'], n_rows)
})# 優化數據類型
df['id'] = df['id'].astype('int32')
df['value1'] = df['value1'].astype('float32')
df['value2'] = df['value2'].astype('float32')
df['category'] = df['category'].astype('category')# 分塊處理
def process_chunk(chunk):# 計算統計量stats = chunk.groupby('category').agg({'value1': ['mean', 'std'],'value2': ['mean', 'std']})return stats# 使用分塊處理
chunk_size = 100000
chunks = [df[i:i+chunk_size] for i in range(0, len(df), chunk_size)]
results = [process_chunk(chunk) for chunk in chunks]
final_result = pd.concat(results)

示例2:內存優化實踐

# 創建示例數據
df = pd.DataFrame({'id': range(1000000),'float_col': np.random.randn(1000000),'int_col': np.random.randint(0, 100, 1000000),'category_col': np.random.choice(['A', 'B', 'C', 'D'], 1000000),'date_col': pd.date_range('2023-01-01', periods=1000000)
})# 內存使用分析
print("優化前內存使用:")
print(df.memory_usage(deep=True).sum() / 1024**2, "MB")# 優化數據類型
df['id'] = df['id'].astype('int32')
df['float_col'] = df['float_col'].astype('float32')
df['int_col'] = df['int_col'].astype('int16')
df['category_col'] = df['category_col'].astype('category')# 優化后的內存使用
print("優化后內存使用:")
print(df.memory_usage(deep=True).sum() / 1024**2, "MB")

總結

性能優化部分涵蓋了:

  1. 內存優化(數據類型優化、內存使用分析、內存清理)
  2. 計算優化(向量化操作、并行計算、分塊處理)
  3. 大數據處理(分塊讀取、增量處理、分布式處理)
  4. 實際應用示例

掌握性能優化技術對于處理大規模數據至關重要,它可以幫助我們:

  • 減少內存使用
  • 提高計算效率
  • 處理大規模數據
  • 優化代碼性能

建議在實際項目中注意:

  • 選擇合適的數據類型
  • 使用向量化操作
  • 合理使用分塊處理
  • 考慮使用分布式計算
  • 定期進行性能分析
  • 及時清理內存
  • 優化代碼結構

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84517.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84517.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++系列之智能指針的使用

💗 💗 博客:小怡同學 💗 💗 個人簡介:編程小萌新 💗 💗 如果博客對大家有用的話,請點贊關注再收藏 🌞 智能指針的使用及原理 AII(Resource Acquisition Is Initializatio…

知識蒸餾(Knowledge Distillation, KD)

知識蒸餾(Knowledge Distillation, KD)是一種模型壓縮與知識遷移技術,通過讓小型學生模型(Student)模仿大型教師模型(Teacher)的行為(如輸出概率分布或中間特征表示)&…

chatGPT 會擴大失業潮嗎?

擊上方關注 “終端研發部” 設為“星標”,和你一起掌握更多數據庫知識 對于部分人而言,失業是必然趨勢。 這不,身后的一測試大哥,自從公司解散之后,已經在家待業半年了。。。 自打OpenAI推出了chatGPT3.0之后&#xff…

FPGA基礎 -- Verilog行為級建模之時序控制

Verilog 行為級建模(Behavioral Modeling)中“時序控制”機制的系統化由淺入深培訓內容,適用于初學者到進階 FPGA 設計工程師的學習路徑。 🎯 一、行為級建模的定位 行為級建模(Behavioral Modeling)是 Ve…

設計模式精講 Day 7:橋接模式(Bridge Pattern)

【設計模式精講 Day 7】橋接模式(Bridge Pattern) 文章簡述 在軟件系統中,類的繼承關系往往會導致類爆炸,尤其是在需要組合多種功能或行為時。橋接模式(Bridge Pattern)通過將抽象部分與其實現部分分離&am…

Apipost 簽約銳捷網絡:AI賦能,共推 ICT 領域 API 生態智能化升級

日前,北京北極狐信息科技有限公司(簡稱 “北極狐科技”)與銳捷網絡股份有限公司(簡稱 “銳捷網絡”)正式簽署合作協議,雙方將聚焦 ICT 基礎設施及解決方案領域,圍繞 API 全鏈路管理與智能化研發…

RK3568筆記八十三:RTMP推流H264和PCM

若該文為原創文章,轉載請注明原文出處。 前面有通過勇哥,實現了RTMP推流,但一直想加上音頻,所以經過測試,寫了一個demo, ffmpeg是使用ubuntu下安裝測試的。 安裝參考:Ubuntu20.4下x264、x265、fdk-aac和FFmpeg4.3源碼編譯安裝_ubuntu安裝libx264-CSDN博客 記錄:實現從…

產業園智慧化升級中 DDC 樓宇自控系統的集成應用優勢:多業態協同與能源可視化管控?

摘要? 在產業園智慧化升級浪潮中,直接數字控制(DDC)系統憑借強大的集成能力,成為實現多業態協同與能源可視化管控的核心技術。本文深入剖析 DDC 系統在整合園區多元業態、優化能源管理方面的獨特優勢,通過系統集成打…

Vue 3瀑布流組件實現詳解 - 圖片展示方案

引言:瀑布流布局的魅力與應用場景 在當今富媒體內容主導的網絡環境中,瀑布流布局已成為展示圖片商品等內容的流行方式。它通過動態布局算法在有限空間內最大化內容展示,提供視覺連續性和流暢瀏覽體驗。本文將深入探討如何使用Vue 3實現一個功…

如何確保郵件內容符合反垃圾郵件規范?

一、遵守相關法規 美國《CAN-SPAM法案》規定,郵件頭信息必須真實準確,要標明廣告性質、提供有效地址,并在 10 個工作日內響應退訂請求。 歐盟《通用數據保護條例》(GDPR)強調獲得用戶明確同意,數據使用要…

MQ解決高并發下訂單問題,實現流量削峰

文章目錄 示例:電商秒殺系統中的流量削峰1. 依賴引入(Maven)2. 消息隊列配置(RabbitMQ)3. 生產者:訂單服務(接收高并發請求)4. 消費者:庫存服務(按系統容量處…

【二進制安全作業】250616課上作業2 - 棧溢出漏洞利用

文章目錄 前言一、使用環境二、程序源碼1. C語言源碼2. 編譯方式 三、源碼分析四、反匯編分析1. 檢查文件安全性2. 查找目標函數3. 計算偏移量4. 繞過 strlen5. 繞過 if 五、編寫EXP結語 前言 直接進入正題 一、使用環境 處理器架構:x86_64 操作系統:U…

Python類型處理與推導式

歡迎來到啾啾的博客🐱。 記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。 有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。 目錄 1 引言2 類型處理3 高效操作AI開發常見數據結構3…

數據庫char字段做trim之后查詢很慢的解決方式

select * from TABLE0 where trim(column1):param 當表數據量大時,即使給column1字段加上索引,這條查詢語句也會很慢。 因為使用trim函數后,column1的索引會失效,有兩種處理方法: 1.給表加上trim(column1)函數索引 …

Kafka核心架構解析:從CAP理論到消息可靠性的設計哲學

摘要 本文從分布式系統CAP理論和消息可靠性兩個視角深入解析Kafka的架構設計,通過概念關系圖和組件交互圖揭示其核心設計思想,并詳細拆解各組件功能與協作機制。文章包含完整的交互流程分析和配置參數說明,是理解Kafka設計精髓的實用指南。 一…

LeetCode 275.H指數 II

題目: 給你一個整數數組 citations ,其中 citations[i] 表示研究者的第 i 篇論文被引用的次數,citations 已經按照 非降序排列 。計算并返回該研究者的 h 指數。 h 指數的定義:h 代表“高引用次數”(high citations&…

OV汽車攝像頭cmos sensor 相關情況介紹

OV汽車攝像頭cmos sensor 相關情況介紹 文章目錄 OV汽車攝像頭cmos sensor 相關情況介紹**1. 汽車攝像頭三大場景應用****2. 車載CMOS SENSOR的核心技術****3. 兩大車規認證:實現真正的車規可靠性****4. 最新產品**2022年,汽車智能化加碼提速,被譽為“智能駕駛之眼”的車載攝…

Pinia在多步驟表單中的實踐應用

引言 Pinia是Vue 3推薦的狀態管理庫,相比Vuex提供了更簡潔的API、更好的TypeScript支持和更靈活的組合式風格。本文基于實際項目代碼,詳細介紹Pinia在多步驟表單場景中的應用方法。 1. Pinia Store的創建與設計 1.1 基礎Store結構 在src/store/modul…

目標檢測之YOLOV11的環境搭建

1 創建虛擬環境 conda create -n yolov11 python3.9 conda activate yolov112 安裝ultralytics 默認是有cuda的情況下 # Install all packages together using conda conda install pytorch torchvision conda 還不能直接安裝ultralytics,需要通過pip進行安裝 …

Android 構建配置中的變量(通常在設備制造商或定制 ROM 的 AndroidProducts.mk 或產品配置文件中定義)

以下是 Android 構建系統中常見的用于產品配置、資源復制和構建規則的變量 1. PRODUCT_COPY_FILES 作用:指定需要從源碼樹復制到鏡像的文件。示例:PRODUCT_COPY_FILES \device/manufacturer/device_name/file.conf:$(TARGET_COPY_OUT_VENDOR)/etc/file…