我正在使用熊猫读取Rest服务中的文件。该文件很大,有100多个列。但是我只想阅读前两列。我知道我可以在read_csv中使用 usecols ,但是我想知道它的工作原理是什么?
大熊猫会读取整个文件并过滤掉所需的列吗? 还是只读取必填列?
我问是因为我不想使内存过载。
答案 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)