【发布时间】:2019-07-26 00:39:46
【问题描述】:
当我们有多个 csv 文件并且所有 csv 的总大小约为 20gb 时,如何分块导入和读取多个 CSV?
我不想使用 Spark,因为我想在 SkLearn 中使用模型,所以我想要 Pandas 本身的解决方案。
我的代码是:
allFiles = glob.glob(os.path.join(path, "*.csv"))
df = pd.concat((pd.read_csv(f,sep=",") for f in allFiles))
df.reset_index(drop=True, inplace=True)
但这失败了,因为我路径中所有 csv 的总大小为 17gb。
我想分块阅读它,但如果我这样尝试会出现一些错误:
allFiles = glob.glob(os.path.join(path, "*.csv"))
df = pd.concat((pd.read_csv(f,sep=",",chunksize=10000) for f in allFiles))
df.reset_index(drop=True, inplace=True)
我得到的错误是这样的:
“无法连接“”类型的对象;只有 pd.Series、pd.DataFrame 和 pd.Panel(已弃用)obj 有效”
有人可以帮忙吗?
【问题讨论】:
-
你试过
df = pd.concat([pd.read_csv(f,sep=",",chunksize=10000) for f in allFiles])。 IE。带方括号?我认为普通的括号给你一个发电机...... -
@mortysporty no 没有帮助。同样的错误
-
查看
pd.read_csv的文档似乎指定chunksize参数会使方法调用返回一个TextFileReader对象(而不是数据框),该对象必须被迭代。跨度> -
如果您没有必要的 RAM 来保存所有块的结果,那么无论您是否以块的形式读取它都无关紧要......您仍然要让您的机器去繁荣......
-
@JonClements - 我有内存。只是它使这个读取过程非常缓慢并降低了性能
标签: python pandas jupyter-notebook sklearn-pandas