python-3.x 使用Pandas阅读大型CSV文件

iezvtpos  于 2022-11-19  发布在  Python
关注(0)|答案(1)|浏览(149)

我必须从CAN读取并分析CSV格式的日志文件。它有161180行,我只用分号分隔566列。这是我的代码。

import csv
import dtale
import pandas as pd
path = 'C:\Thesis\Log_Files\InputOutput\Input\Test_Log.csv'
raw_data = pd.read_csv(path,engine="python",chunksize = 1000000, sep=";")
df = pd.DataFrame(raw_data)
#df
dtale.show(df)

当我在Jupyter Notebook中运行代码时,遇到以下错误信息。请帮助我。提前感谢!
内存错误:无法为形状为(161180,566)且数据类型为对象的数组分配348. MiB

import time
import pandas as pd
import csv
import dtale
chunk_size = 1000000
batch_no=1
for chunk in pd.read_csv("C:\Thesis\Log_Files\InputOutput\Input\Book2.csv",chunksize=chunk_size,sep=";"):
    chunk.to_csv('chunk'+str(batch_no)+'.csv', index=False)
    batch_no+=1
df1 = pd.read_csv('chunk1.csv')    
df1
dtale.show(df1)

我用上面的代码只有10行和566列。然后它的工作。如果我考虑所有的行(161180),它不工作。有人能帮助我吗?提前感谢!
I have attached the output here

egdjgwm8

egdjgwm81#

加载数据文件时RAM不足。最佳选择是将文件拆分为块并读取文件块
要读取前999,999(非标题)行:

read_csv(..., nrows=999999)

如果要读取行1,000,000 ... 1,999,999

read_csv(..., skiprows=1000000, nrows=999999)

您可能还需要使用chunksize:
这将返回一个用于迭代的TextFileReader对象:

chunksize = 10 ** 6
for chunk in pd.read_csv(filename, chunksize=chunksize):
    process(chunk)

相关问题