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環境下,不容易出錯。