python内存问题,刷新,csv大小

时间:2018-11-14 14:17:45

标签: python arrays memory flush

解决了数据集的排序问题之后,我的代码在这一点上遇到了问题。

with open(fns_land[xx]) as infile:
    lines = infile.readlines()
    for line in lines:
        result_station.append(line.split(',')[0])
        result_date.append(line.split(',')[1])
        result_metar.append(line.split(',')[-1])

我在线路行中有问题。在这一行中,数据有时会非常庞大​​,我会遇到致命错误。

是否有简短的方法来重写这一点?

2 个答案:

答案 0 :(得分:1)

改为使用readline,这样一次可以读取一行,而不会将整个文件加载到内存中。

with open(fns_land[xx]) as infile:
    while True:
        line = infile.readline()
        if not line:
            break
        result_station.append(line.split(',')[0])
        result_date.append(line.split(',')[1])
        result_metar.append(line.split(',')[-1])

答案 1 :(得分:1)

如果要处理数据集,建议您看看pandas,它非常适合处理数据整理。

如果您的问题是大型数据集,则可以分块加载数据。

import pandas as pd
tfr = pd.read_csv('fns_land{0}.csv'.format(xx), iterator=True, chunksize=1000)
  1. 行:导入的熊猫模块
  2. 行:从csv文件中以1000行为块读取数据。

这将是 pandas.io.parsers.TextFileReader 类型。要加载整个csv文件,请执行以下操作:

df = pd.concat(tfr, ignore_index=True)

添加了参数 ignore_index = True 以避免重复索引。

现在,您已将所有数据加载到数据框中。然后将列作为矢量进行数据处理,这也比常规的逐行处理要快。

在这里查看这个处理类似问题的question