2016-09-30 72 views
0

我有一个定制格式的文本文件。我也有一个解析器从每一行中提取相关的列。我想一次读入文件中的一行,并将它们添加到数据框中。如何解析文件并生成数据帧

问题是将一行添加到数据帧很慢。

这样做的正确方法是什么?

+0

是什么让你说,附加到数据帧是慢?如果文件很大,我希望即使逐个添加条目,您的代码最有可能在从磁盘读取时受到限制? –

+0

@eleanora,我会建议你以完全相同的格式发布你的文本文件的样本,所以我们可以给你一个合格的答案。通常将单行添加到数据框非常缓慢。 – MaxU

回答

1

如果文件很大,您的代码可能受到从磁盘读取文件的时间的限制,而不是将时间添加到数据帧的时间,除非您有一些具体的配置文件数据来建议。例如,在SSD上(读取吞吐量〜400MB/s),4GB文件仅需从磁盘加载10秒。在HDD(〜40MB/s)上,这可能会长达100秒。如果是这种情况,加速加载的一种方法是将文件转换为熊猫支持的格式,将其压缩,然后使用read_table()的运行时选项read_table()在创建数据帧时实时解压缩。

否则,如果您确信这是真的不是问题,你有这些选择,如果逐一加入并不确定,该文件是太大,无法在内存中缓冲:

  1. 更改数据格式以匹配Pandas支持的内容;例如一个CSV文件似乎是一个非常标准的选择,你可以去;
  2. 使用下面列出的其中一个构造函数以较大批量(例如1-10K行)创建数据框,然后合并它们,这可能比使用恒定内存量逐个添加条目更快;

The other ways to construct a dataframe从数据结构将文件解压到:从元组

DataFrame.from_records构造,也记录 阵列

DataFrame.from_dict从系列阵列的类型的字典或类型的字典

DataFrame.from_items来自(键,值)对的序列

pandas.read_csvpandas.read_tablepandas.read_clipboard

+0

谢谢。有没有这些允许你使用函数来逐行解析输入行的单行?我不想将整个文件读入内存,解析它,然后从中创建数据帧,因为它非常大。 – eleanora

+0

@eleanora nope;有多大? –

+0

约10亿行。 – eleanora