向下转换后转换列的替换不会结束

时间:2019-01-14 19:42:54

标签: python dataframe bigdata correlation downcast

我正在做我的第一个相关分析。我已经通过excel文件接收了数据,已将其导入为Dataframe(必须进行数据透视),现在我拥有了将近3000行和25000列的集合。我无法从中选择一个子集,因为每一列对于该项目都很重要,而且我也不知道每一列存储哪些信息以选择最有趣的信息,因为它是用整数编码的(这是一个整数大学项目)。就像一个大型问卷,每个人都有自己的一行,每个问题的答案都存储在不同的列中。

我真的需要解决这个问题,因为稍后我将不得不用列的中位数替换许多Nans,然后开始相关分析。我首先尝试了这一部分,但由于大小原因并没有进行,所以这就是为什么我首先尝试向下转换的原因

数据集有600 MB,我对浮点数使用了向下转换指令,并节省了300 MB,但是当我尝试替换数据集副本中的新列时,它运行了30分钟,并且没有执行任何操作。没有警告,没有错误,直到我中断了内核,并且仍然没有提示它为什么不起作用。

我不能先使用delete Nans指令,因为有太多指令了,所以它将擦除几乎所有内容。

#i've got this code from https://www.dataquest.io/blog/pandas-big-data/
def mem_usage(pandas_obj):
    if isinstance(pandas_obj,pd.DataFrame):
        usage_b = pandas_obj.memory_usage(deep=True).sum()
    else: # we assume if not a df it's a series
        usage_b = pandas_obj.memory_usage(deep=True)
    usage_mb = usage_b / 1024 ** 2 # convert bytes to megabytes
    return "{:03.2f} MB".format(usage_mb)

gl_float = myset.select_dtypes(include=['float'])
converted_float = gl_float.apply(pd.to_numeric,downcast='float')

print(mem_usage(gl_float)) #almost 600
print(mem_usage(converted_float)) #almost 300

optimized_gl = myset.copy()
optimized_gl[converted_float.columns]= converted_float #this doesn't end

替换后,我想使用Imputer函数进行Nans替换并为我的数据集打印相关结果

1 个答案:

答案 0 :(得分:0)

最后我决定使用这个:

 column1 = myset.iloc[:,0]
 converted_float.insert(loc=0, column='ids', value=column1)

代替了optimized_gl的行,它解决了这个问题,但之所以可能,是因为除了第一列以外的每一列都发生了变化。所以我只需要将第一个添加到其他人。