Mis*_*ion 5 python file-io string-concatenation dataframe python-2.7
我有关于python的速度/效率相关问题:
我需要编写大量非常大的R dataframe-ish文件,大小约为0.5-2 GB.这基本上是一个大的制表符分隔表,其中每一行可以包含浮点数,整数和字符串.
通常,我只是将我的所有数据都放在numpy数据帧中并使用np.savetxt来保存它,但由于存在不同的数据类型,因此它无法真正放入一个数组中.
因此我只是简单地将线条组装成字符串,但这有点慢.到目前为止,我正在做:
1)将每一行组合为一个字符串2)将所有行连接为单个巨大的字符串3)将字符串写入文件
我有几个问题:1)大量的字符串连接最终耗费大量时间2)我运行RAM来保持内存中的字符串3)...这反过来导致更多单独的file.write命令,也非常慢.
所以我的问题是:这类问题的常规是什么?一种平衡速度与内存消耗的方法,可实现最高效的字符串连接和写入磁盘.
......或者这个策略可能只是坏事,我应该做一些完全不同的事情?
提前致谢!
小智 6
看起来像熊猫可能是解决这个问题的好工具.开始使用pandas非常容易,它可以很好地处理将数据导入python所需的大多数方法.Pandas处理混合数据(浮点数,整数,字符串),通常可以自己检测类型.
一旦你在pandas中有一个(类似R的)数据帧,将帧输出到csv非常简单.
DataFrame.to_csv(path_or_buf, sep='\t')
Run Code Online (Sandbox Code Playgroud)
您可以执行许多其他配置操作,以使您的制表符分隔文件恰到好处.
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html
除非遇到性能问题,否则您可以逐行写入文件.Python内部使用缓冲,可能会在性能和内存效率之间做出很好的折衷.
Python缓冲与OS缓冲不同,您可以通过设置buffering参数来指定缓冲的方式open.
我认为您可能想要做的是创建一个内存映射文件。请查看以下文档,了解如何使用 numpy 执行此操作:
http://docs.scipy.org/doc/numpy/reference/ generated/numpy.memmap.html
| 归档时间: |
|
| 查看次数: |
11372 次 |
| 最近记录: |