如何處理python中的大文件

如何處理python中的大文件

當只有一臺機器可用時,一些數據科學愛好者在處理大型數據文件時遇到了困難。文件大小可能會超過計算機中的可用內存。在大多數數據科學項目中,可以對文件進行拆分處理,以獲得機器學習模型所需的數據。例如,按操作分組以獲得均值、中位數、最大值、求和或其他值。這將生成一個可以在內存中處理的較小版本的文件。現在的任務是如何將大文件分割成更小的塊。

熟悉unix的人會說,使用shell命令或awk可以很容易地完成。文件可以按行、列、列值、大小等進行拆分。以下是兩個常見的例子:

1.Unix命令按行數拆分myfile。-l參數定義每個拆分中的最大行數。輸出文件如splitfileaa,splitfileab等。

split -l 500 myfile splitfile

2. Unix命令按文件大小拆分。-b參數定義輸出的文件大小。同樣,輸出將具有上面示例中的名稱。

split -b 40k myfile splitfile

注意,unix中的awk命令可用於創建按列中的值拆分的不同文件。

將數據拆分到更小的部分後,機器學習開發者就可以在一臺機器上進行處理。python中的panda有能力處理這些情況。下面是一個以塊的形式讀取大文件並動態處理的例子。Python代碼示例如下:

import pandas as pd
# Split data into smaller chunks and process in parts
chunk_size = 100000
required_data = pd.DataFrame()
for data in pd.read_csv(myfile,chunksize = chunk_size):
data["datetime"]= pd.to_datetime(data["timestamp"],unit = 's')
data["datetime"]=data["datetime"].dt.tz_localize('UTC').dt.tz_convert('Asia/Kolkata')
data["date"] =data["datetime"].dt.date
data["week"] =data["datetime"].dt.week
data["hour"] = data["datetime"].dt.hour
data["weekday"] = data["datetime"].dt.day_name()
required_data_chunk = data.groupby(["id","date","week","weekday","hour"])["datetime"].count()
required_data_chunk = pd.DataFrame(required_data_chunk)
required_data_chunk.reset_index(inplace=True)
required_data = required_data.append(required_data_chunk)
# Merge the processed data splits into one file
required_data_final = required_data[["id","date","week","weekday","hour","datetime"]].groupby(
["driver_id","date","week","weekday","hour"])["datetime"].sum()
required_data_final = pd.DataFrame(required_data_final)
required_data_final.reset_index(inplace=True)
如何處理python中的大文件

對於R用戶,可以使用包,如data.table。


分享到:


相關文章: