Python 如何仅将特定类型的行加载到数据帧中以避免内存过载
我有一个91gb的数据帧,当我试图将它加载到内存中使用它时,我会被内存挤压。例如,是否可以仅在m.0107_f将所有数据中的行索引到Dataframe中,而不将完整数据加载到Dataframe中 我的数据集示例如下: 我想做的事-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 =
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