我正在使用pandas来读取休息服务中的文件。该文件非常庞大,有超过100列。但我只想阅读前两列。我知道我可以在read_csv中使用usecols,但我想知道它究竟是如何工作的?
pandas是否读取整个文件并过滤掉所需的列?或者它只读取所需的列?
我问,因为我不想重写内存。
根据文档,它将读取整个文件(无法只读取磁盘中的列),但只会解析和存储use_cols
变量中给出的列(强调我的):
usecols:list-like或callable,optional
返回列的子集...使用此参数可以更快地解析分析时间并降低内存使用量。
使用该参数可以大大减少解析时间,并且您获得的内存对内存的影响较小。
您可以在以下示例中看到它:
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)