python 内存、刷新、csv 大小的问题
Problem with python memory, flush, csv size
在解决了一个数据集的排序之后,我的代码在这一点上遇到了问题。
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])
我的线条有问题。在这一行中,数据有时会很大,我会收到终止错误。
有没有short/nice方法来重写这一点?
改用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])
如果您正在处理数据集,我建议您看一下 pandas,我非常适合处理数据整理。
如果您的问题是大型数据集,您可以分块加载数据。
import pandas as pd
tfr = pd.read_csv('fns_land{0}.csv'.format(xx), iterator=True, chunksize=1000)
- 行:导入pandas模块
- 行:以 1000 行为单位从您的 csv 文件中读取数据。
这将是 pandas.io.parsers.TextFileReader 类型。要加载整个 csv 文件,您需要跟进:
df = pd.concat(tfr, ignore_index=True)
增加参数ignore_index=True避免索引重复
您现在已将所有数据加载到数据框中。然后将列作为向量进行数据操作,这也比常规的逐行更快。
看看这里 处理类似的东西。
在解决了一个数据集的排序之后,我的代码在这一点上遇到了问题。
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])
我的线条有问题。在这一行中,数据有时会很大,我会收到终止错误。
有没有short/nice方法来重写这一点?
改用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])
如果您正在处理数据集,我建议您看一下 pandas,我非常适合处理数据整理。
如果您的问题是大型数据集,您可以分块加载数据。
import pandas as pd
tfr = pd.read_csv('fns_land{0}.csv'.format(xx), iterator=True, chunksize=1000)
- 行:导入pandas模块
- 行:以 1000 行为单位从您的 csv 文件中读取数据。
这将是 pandas.io.parsers.TextFileReader 类型。要加载整个 csv 文件,您需要跟进:
df = pd.concat(tfr, ignore_index=True)
增加参数ignore_index=True避免索引重复
您现在已将所有数据加载到数据框中。然后将列作为向量进行数据操作,这也比常规的逐行更快。
看看这里