首页 > 解决方案 > 减少使用 pandas 或内置函数打开解析大型 TSV 文件的时间

问题描述

我有一个非常大的 tsv 文件,文件内容如下所示

数据:

a       b       value1  value2              
a550    b234    0.555   3.61
a710    b234    0.0963  5.18
a473    b234    0.0843  3.94
a782    b234    0.00542 14.0
a544    b234    0.105   3.94
a211    b234    0.0506  4.71
a656    b234    -0.0295 4.04
a303    b234    -0.0047 4.61
a303    b234    -0.017  4.56
a303    b234    0.0522  8.78
a244    b234    0.0806  5.56
.
.
.
.

我已经使用 pandas 读取文件并将其解析为字典,但这需要很多时间

import pandas as pd
import time

start_time =time.time()
data = pd.read_csv("bigfile.tsv", sep ="\t")
data['a_b'] = data[['a', 'b']].apply(tuple, axis=1)
data = dict(zip(data['a_b'], data['score']))
end_time = time.time()

execution_time = end_time-start_time
print(data)
print("time:",execution_time)

输出:

{('a550', 'b234'): -0.0828, ('a710', 'b234'): 0.00984, .............}
time: 464.0104968547821

我知道有更好的方法来加载这个文件以减少加载和解析时间,有人可以帮我吗

标签: pythonpandas

解决方案


data['a_b'] = data[['a', 'b']].apply(tuple, axis=1) 是大量计算。通过使用纯 python 来避免这种情况。我测试了长度超过 1000 万行的类似数据。只用了3秒完成任务。

data = pd.read_csv("bigfile.tsv", sep ="\t")
a_b = list(zip(data['a'].to_list(),data['b'].to_list()))
data = dict(zip(a_b, data['value1'].to_list()))

推荐阅读