我应该使用Python Panda还是用C编写自定义代码来读取和过滤数千GB CSV文件中的数据



我有一个13 GB的CSV文件,我需要读取该文件并从中过滤数据。我使用panda并分块读取,但时间太长。python中是否有其他库比panda更快,或者用C编写自定义代码会是更好的选择?

我正在使用以下代码:

input_df=pd.read_csv("input file",chunksize=60000)
frames=[]
for i in input_df:
filter_df=i[i["Column1"].str.contains("given string")|i["column2"].str.contains("given string")|i["column3"].str.contains("given string")]
frame=pd.DataFrame(filter_df)
frames.append(frame)
output_df=pd.concat(frames)
output_df.to_csv('output.csv',index=False)

我有8GB的内存,所以必须分块读取数据。

Pandas和Numpy是用C构建的,所以我不知道即使你用纯C编写代码,你也会获得更好的速度。相反,编写糟糕的C代码可能会让它变得更糟
试着专注于改进你的算法或你目前阅读它的方式。

如果你只想读取一个CSV文件,并根据它是否包含某个字符串来过滤数据,那么我认为逐行读取是一种更好的方法。

# store your results here
result = {"col1":[], "col2":[], "col3":[]}
to_check = "some string"
reset_after = 1000
current_line = 0
fp = open('filename.csv', 'r')
while ((line := fp.readline()) != ''):
current_line += 1
# Now, create a dataframe out of current result dictionary and save it
df = DataFrame(result)
df.to_csv("result_file.csv", mode='a', index=False, header=False)
# reset after saving every reset_after line has reached
if current_line >= reset_after:
result = {"col1":[], "col2":[], "col3":[]}
val1, val2, val3 = line.split(",")
if (col1 == to_check) or (col2 == to_check) or (col3 == to_check):
result['col1'].append(val1)
result['col2'].append(val2)
result['col3'].append(val3)

最新更新