网站改版需求说明,wordpress 制作瀑布流,百度快速排名软件,被禁止访问网站怎么办问题描述
从ES下载数据#xff0c;数据格式为json#xff0c;然后由pandas进行解析#xff0c;json中的嵌套字段会进行展开作为列名(由于维度初期无法预测#xff0c;所以根据数据有啥列就使用啥列#xff0c;这是最方便的点)#xff0c;变成表格#xff0c;方面了后续…问题描述
从ES下载数据数据格式为json然后由pandas进行解析json中的嵌套字段会进行展开作为列名(由于维度初期无法预测所以根据数据有啥列就使用啥列这是最方便的点)变成表格方面了后续的处理但在使用过程却发现原本6.xG的数据量在解析预处理时候会变成60多G甚至80G的内存占用资源难以满足
解决
为了方便测试使用了一个300MB大小的数据进行测试 1.为什么原本的300MB数据量会占用2G内存呢仅仅下面一个操作
df pd.json_normalize(datas)思考: (1)python是面向全对象语言所以里面每一个数值都会是对象这个对象很大 (2)数据集合json中的指标字段并不对齐例如datas [{field1:100},{“field1”:90,“field2”:12}],既然pandas是表格总要填充 验证思考1 查询pd对象,果然用大的对象来存储数据表中共有2732列13列是等文本数据对应object,2675为float64,44列为int64然而pd.json_normalize方法没有设置字段类型
print(df.info())
------------------------------------
class pandas.core.frame.DataFrame
RangeIndex: 100000 entries, 0 to 99999
Columns: 2732 entries, feild1 to feild2
dtypes: float64(2675), int64(44), object(13)
memory usage: 2.0 GB验证思考2 其中一个json有新的字段score,发现增加24个字节说明每条8字节做了填充
a1 json.loads({name:zhangsan,age:12})
a2 json.loads({name:zhangsan,age:12})
a3 json.loads({name:zhangsan,age:12})
aa list()
aa.append(a1)
aa.append(a2)
aa.append(a3)
df pd.json_normalize(aa)
print(df.info())
---------------------------
class pandas.core.frame.DataFrame
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 name 3 non-null object1 age 3 non-null int64
dtypes: int64(1), object(1)
memory usage: 176.0 bytesa1 json.loads({name:zhangsan,age:12})
a2 json.loads({name:zhangsan,age:12})
a3 json.loads({name:zhangsan,age:12,scroe:100})
print(df.info())
---------------------------
memory usage: 200.0 bytes解决问题: (1)如果原始datas数据量太大那么只能使用pd.json_normalize分批读取后保存csv(后面合并的时候可能会涉及拼接这里不展开) (2)读取csv指定字段和字段类型,例如读取浮点类型的字段这里单精度float32就可以啦
pd.read_csv(path, usecols[浮点列1,浮点列2], dtypenp.float32)2.可能中间过程还会涉及拆分训练集验证集标准化等还可以使用del先释放不需要的内存(注意del的对象要确保无引用否则del无效)
train_x, valid_x, train_y, valid_y train_test_split(datas, y_index, y, test_size0.3, random_state42)
del datas #确保datas无其他引用