vaex讀取和處理大型文件的方法


1、針對pandas在對讀取超過上G的數據時速度較慢,並且即使讀取后,可能由於文件過大使用pandas的方法導致死機的情況較多。
 
2、vaex屬於DataFrame的一個擴展性,針對大型文件的處理,特別好用,其機理是采用“映射”的方式,並不把數據直接讀取到內存里面。其相關的介紹和使用教程,API等可在官網查找到:https://vaex.io/docs/api.html#vaex.from_csv。其中的方法和純Pandas的相似,有些幾乎一樣的。
 
3、實際應用:
這里舉一個簡單:比如我現在有一個將近6G的csv文件,來自於期貨螺紋鋼(rb),2016年到現在的數據,文件比較大,我們要對這個數據進行清洗,針對數據的datetime,分解成Data(格式:YYYY/MM/DD)和Time(格式:HH:MM:SS)的樣式,其中last_price存為Price,成交量volume存出為Volume。然后對比后存儲為csv文件。過程就是一個簡單的數據清洗。

 

 

 
第一步:讀取原始csv文件並存儲為vaex的hdf5的數據結構,並讀取出來
此時我們可以看到文件夾里面生成了一個hdf5數據結構,打開速度也是非常快的,當日你也可以試一下Pandas會讓你慢的崩潰。

 

 

 
第二步:查看數據信息

 

 

此時看到,這里生成的惰性數據結構hdf5和純Pandas幾乎是一樣的。
 
 
第三步:增加兩個處理字符的方法,下面apply的方法和純Pandas略有不一樣,此時要注意。並打印清洗后的DataFrame數據結果:

 

 

 

 

 
第四步:查看清洗后數據的信息,對比,然后存儲為csv文件。
對比后數據行數一致

 

 

 
 
 
 
 
4、源碼:
import pandas as pd
import vaex


# df = vaex.open("rb_tick_20160101_20210401.csv")
# df.export_hdf5("rb_tick_20160101_20210401.hdf5")
# 生成hdf5的數據
vaex.from_csv("rb_tick_20160101_20210401.csv", convert=True)

# 打開生成的數據並賦值給變量data
data = vaex.open("rb_tick_20160101_20210401.csv.hdf5")

# 查看數據信息
data.info()

# 創建清洗后的數據存放dataFrame
cleaned_data = pd.DataFrame()# 查看數據信息


# 創建日期和時間的數據整理函數
def dateMethod(st):
    return str(st[0:4]) + "/" + str(st[5:7]) + "/" + str(st[8:10])

def timeMethod(st):
    return str(st[11:19])

# 收集Date
cleaned_data["Date"] = data.apply(dateMethod, arguments=[data.datetime]).values
# 收集Time
cleaned_data["Time"] = data.apply(timeMethod, arguments=[data.datetime]).values
# 收集Price
cleaned_data["Price"] = data["KQ.m@SHFE.rb.last_price"].values
# 收集Volume
cleaned_data["Volume"] = data["KQ.m@SHFE.rb.volume"].values

# 打印清洗后的數據
cleaned_data


# 對比清洗后的數據內容和清洗前的數據信息
cleaned_data.info()
data.info()

# 清洗后的數據存儲為csv文件
cleaned_data.to_csv("cleaned_data.csv")

  

 
5、建議安裝vaex在純python環境下,不容易出錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM