說到Python處理大數據集,可能會第一時間想到Numpy或者Pandas。
這兩個庫使用場景有些不同,Numpy擅長于數值計算,因為它基于數組來運算的,數組在內存中的布局非常緊湊,所以計算能力強。但Numpy不適合做數據處理和探索,缺少一些現成的數據處理函數。
而Pandas的特點就是很適合做數據處理,比如讀寫、轉換、連接、去重、分組聚合、時間序列、可視化等等,但Pandas的特點是效率略低,不擅長數值計算。
你可以同時使用Pandas和Numpy分工協作,做數據處理時用Pandas,涉及到運算時用Numpy,它們的數據格式互轉也很方便。
目前前言,最多人使用的Python數據處理庫仍然是pandas,這里重點說說它讀取大數據的一般方式。
Pandas讀取大數據集可以采用chunking分塊讀取的方式,用多少讀取多少,不會太占用內存。
import pandas as pd # 設置分塊大小,例如每次讀取 10000 行 chunksize = 10000 # 使用 chunksize 參數分塊讀取 CSV 文件 for chunk in pd.read_csv('large_file.csv', chunksize=chunksize): # 在這里處理每個 chunk,例如打印每行的信息 print(chunk.head()) # 或者其他你需要的操作 # 如果你需要保存或進一步處理每個 chunk 的數據,可以在這里進行 # 例如,你可以將每個 chunk 寫入不同的文件,或者對 chunk 進行某種計算并保存結果
但使用分塊讀取時也要注意,不要在循環內部進行大量計算或內存密集型的操作,否則可能會消耗過多的內存或降低性能。
其次你可以考慮使用用Pandas讀取數據庫(如PostgreSQL、SQLite等)或外部存儲(如HDFS、Parquet等),這會大大降低內存的壓力。
盡管如此,Pandas讀取大數據集能力也是有限的,取決于硬件的性能和內存大小,你可以嘗試使用PySpark,它是Spark的python api接口。
PySpark提供了類似Pandas DataFrame的數據格式,你可以使用toPandas() 的方法,將 PySpark DataFrame 轉換為 pandas DataFrame,但需要注意的是,這可能會將所有數據加載到單個節點的內存中,因此對于非常大的數據集可能不可行)。
相反,你也可以使用 createDataFrame() 方法從 pandas DataFrame 創建一個 PySpark DataFrame。
PySpark處理大數據的好處是它是一個分布式計算機系統,可以將數據和計算分布到多個節點上,能突破你的單機內存限制。
其次,PySpark采用懶執行方式,需要結果時才執行計算,其他時候不執行,這樣會大大提升大數據處理的效率。
from pyspark.sql import SparkSession # 創建一個 SparkSession 對象 spark = SparkSession.builder / .appName("Big Data Processing with PySpark") / .getOrCreate() # 讀取 CSV 文件 # 假設 CSV 文件名為 data.csv,并且有一個名為 'header' 的表頭 # 你需要根據你的 CSV 文件的實際情況修改這些參數 df = spark.read.csv("path_to_your_csv_file/data.csv", header=True, inferSchema=True) # 顯示數據集的前幾行 df.show(5) # 對數據進行一些轉換 # 例如,我們可以選擇某些列,并對它們應用一些函數 # 假設我們有一個名為 'salary' 的列,并且我們想要增加它的值(僅作為示例) df_transformed = df.withColumn("salary_increased", df["salary"] * 1.1) # 顯示轉換后的數據集的前幾行 df_transformed.show(5) # 將結果保存到新的 CSV 文件中 # 注意:Spark 默認不會保存表頭到 CSV,你可能需要手動處理這個問題 df_transformed.write.csv("path_to_save_transformed_csv/transformed_data", header=True) # 停止 SparkSession spark.stop()
如果你不會使用PySpark,可以考慮Pandas的拓展庫,比如modin、dask、polars等,它們提供了類似pandas的數據類型和函數接口,但使用多進程、分布式等方式來處理大數據集。
modin庫
import modin.pandas as pd # 讀取 CSV 文件 df = pd.read_csv('path_to_your_csv_file.csv') # 顯示前幾行 print(df.head())
Dask庫
import dask.dataframe as dd # 讀取 CSV 文件 df = dd.read_csv('path_to_your_csv_file.csv') # 觸發計算并顯示前幾行(注意這里使用的是 compute 方法) print(df.head().compute())
Polars庫
import polars as pl # 讀取 CSV 文件 df = pl.read_csv('path_to_your_csv_file.csv') # 顯示前幾行print(df.head())
這幾個庫的好處是,使用成本很低,基本和pandas操作方式一樣,但又能很好的處理大數據。
所以說Pandas是完全能勝任處理大數據集的,它目前的周邊生態庫非常豐富。
本文鏈接:http://www.tebozhan.com/showinfo-26-89403-0.html說到Python處理大數據集,別說你會用Pandas
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 記一次 .NET 某酒店后臺服務卡死分析