Python:加载以逗号作为小数分隔符的数据
我有一些非常大的txt文件(大约1.5GB),我想将它们作为数组加载到Python中。问题是在该数据中,逗号用作十进制分隔符。对于较小的胶片,我提出了以下解决方案:Python:加载以逗号作为小数分隔符的数据,python,Python,我有一些非常大的txt文件(大约1.5GB),我想将它们作为数组加载到Python中。问题是在该数据中,逗号用作十进制分隔符。对于较小的胶片,我提出了以下解决方案: import numpy as np data= np.loadtxt(file, dtype=np.str, delimiter='\t', skiprows=1) data = np.char.replace(data, ',', '.') data = np.char.replace(data,
import numpy as np
data= np.loadtxt(file, dtype=np.str, delimiter='\t', skiprows=1)
data = np.char.replace(data, ',', '.')
data = np.char.replace(data, '\'', '')
data = np.char.replace(data, 'b', '').astype(np.float64)
但是对于大型fils,Python会遇到内存错误。是否有其他更节省内存的方法来加载此数据?可能是您的1.5 GB文件需要的内存超过1.5 GB 试着把它分成几行 有关更多信息:
np.loadtxt(文件,dtype=np.str,delimiter='\t',skiprows=1)的问题是它使用python对象(字符串)而不是
float64
,这是一种内存效率非常低的方法。你可以使用熊猫阅读表
读取文件并设置decimal=','以更改默认行为。这将允许无缝读取字符串并将其转换为浮点数。加载数据帧后,使用df.values获取numpy数组。
如果内存仍然太大,请使用块
如果仍然不走运,请尝试np.float32格式,这将进一步减少内存占用。您应该尝试自己解析它,对每一行进行迭代(因此隐式使用一个不会将所有文件读入内存的生成器)。 另外,对于这种大小的数据,我将使用python标准的
array
库,它使用与c
数组类似的内存。也就是说,内存中的一个值紧挨着另一个值(numpy
array在内存使用方面也非常有效)
我确信可以编写类似的代码(具有类似的内存占用),用
numpy.array
替换array.array
,特别是在需要二维数组的情况下。查看区域设置:您能从文件中提取示例数据吗?全部都在一行吗?请查看以下问题/答案:
import array
def convert(s):
# The function that converts the string to float
s = s.strip().replace(',', '.')
return float(s)
data = array.array('d') #an array of type double (float of 64 bits)
with open(filename, 'r') as f:
for l in f:
strnumbers = l.split('\t')
data.extend( (convert(s) for s in strnumbers if s!='') )
#A generator expression here.