即使使用usecols,大熊猫也会读取整个文件吗?

时间:2019-02-12 12:10:47

标签: python pandas

我正在使用熊猫读取Rest服务中的文件。该文件很大,有100多个列。但是我只想阅读前两列。我知道我可以在read_csv中使用 usecols ,但是我想知道它的工作原理是什么?

大熊猫会读取整个文件并过滤掉所需的列吗? 还是只读取必填列?

我问是因为我不想使内存过载。

2 个答案:

答案 0 :(得分:6)

根据文档,它将读取整个文件(无法仅从磁盘读取列),而仅解析和存储use_cols变量中给出的列(强调我的意思):

  

usecols:类似于列表或可调用的列表,可选

     

返回列的子集... 使用此参数可以大大缩短解析时间并降低内存使用量

答案 1 :(得分:2)

使用该参数可以大大减少解析时间,并且获得的信息对内存的影响也较小。

您可以在以下示例中看到它:

import pandas as pd
import numpy as np

data = np.random.random_integers(1, 20, (1000000, 100))
df = pd.DataFrame(data=a)
df.to_csv('testing.csv')

%timeit x = pd.read_csv('testing.csv')
7.38 s ± 86.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit x = pd.read_csv('testing.csv', usecols=[0, 1])
2.91 s ± 19.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)