Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅将特定类型的行加载到数据帧中以避免内存过载_Python_Python 3.x_Pandas - Fatal编程技术网

Python 如何仅将特定类型的行加载到数据帧中以避免内存过载

Python 如何仅将特定类型的行加载到数据帧中以避免内存过载,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个91gb的数据帧,当我试图将它加载到内存中使用它时,我会被内存挤压。例如,是否可以仅在m.0107_f将所有数据中的行索引到Dataframe中,而不将完整数据加载到Dataframe中 我的数据集示例如下: 我想做的事- df = pd.read_csv('/Volumes/big-flash-drive/asdf/FaceImageCroppedWithAlignment.tsv', sep='\t', nrows='m.0107_f', names =

我有一个91gb的数据帧,当我试图将它加载到内存中使用它时,我会被内存挤压。例如,是否可以仅在m.0107_f将所有数据中的行索引到Dataframe中,而不将完整数据加载到Dataframe中

我的数据集示例如下:

我想做的事-

df = pd.read_csv('/Volumes/big-flash-drive/asdf/FaceImageCroppedWithAlignment.tsv', sep='\t', nrows='m.0107_f', 
             names = ["Freebase MID", "EntityNameString", "ImageURL", "FaceID","FaceRectangle_Base64Encoded",
                       "FaceData_Base64Encoded"])

我知道这不太可能,但如果您必须使用CSV文件,可能有人可以帮助您解决此问题。

请尝试以下方法:

fn = '/Volumes/big-flash-drive/asdf/FaceImageCroppedWithAlignment.tsv'
cols = ["Freebase MID","EntityNameString","ImageURL", "FaceID",
        "FaceRectangle_Base64Encoded","FaceData_Base64Encoded"]
chunks = pd.read_csv(fn, sep='\t', chunksize=10**5, names=cols)
df = pd.concat([x.query("index == 'm.0107_f'") for x in chunks], ignore_index=True)
如果您可以以不同的格式存储数据,我强烈建议您使用HDF5格式或将数据存储在RDBMS DB中:

演示:

这将只读取满足
where
子句的行

import blaze
import pandas as pd
from io import StringIO

# using StringIO for demonstration-purposes! Don't actually do this in your code!
# your code would look like: data = blaze.data('myfile.csv') 
s = '''idx,MID,S,A
m.0107_f,a,1,True
m.0107_x,b,2,False
m.0107_f,c,3,True'''
data = pd.read_csv(StringIO(s)) 
数据
看起来像:

        idx MID  S      A
0  m.0107_f   a  1   True
1  m.0107_x   b  2  False
2  m.0107_f   c  3   True
现在火焰:

csv_data = blaze.data(data)
csv_data[csv_data['idx'] == 'm.0107_f']
结果:

        idx MID  S     A
0  m.0107_f   a  1  True
2  m.0107_f   c  3  True

这里的好处是,使用blaze只加载内存中满足条件的项(相当于
m.0107_f
)。

非常感谢,我会尝试一下,顺便说一句,我在尝试ParserError:error标记数据后出现此错误。C错误:内存不足。您应该由Jon Clements签出。他的建议是使用。谢谢你的帮助
        idx MID  S     A
0  m.0107_f   a  1  True
2  m.0107_f   c  3  True