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,

我有一些非常大的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, '\'', '')
        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.