我想用pandas来填充一个大的数据矩阵(90*90000),然后是一个更大的数据矩阵(150000*800000)。 目前,我正在笔记本电脑上测试较小的一个(8gb内存,Haswell core i5 2.2ghz,较大的数据集将在服务器上运行)。在
列中有一些缺失的值,我想用所有行中最频繁的一个来填充这些值。在
我的工作代码是:
freq_val = pd.Series(mode(df.ix[:,6:])[0][0], df.ix[:,6:].columns.values) #most frequent value per column, starting from the first SNP column (second row of 'mode'gives actual frequencies)
df_imputed = df.ix[:,6:].fillna(freq_val) #impute unknown SNP values with most frequent value of respective columns
在我的机器上插补大约需要20分钟。有没有其他的实现可以提高性能?在
试试这个:
我尝试了不同的方法。关键的学习是
mode
函数非常慢。或者,我使用np.unique
(return_counts=True
)和np.bincount
实现了相同的功能。后者的速度应该更快,但它不适用于NaN
值。在优化后的代码现在需要28秒才能运行。MaxU的答案需要48秒才能完成。在
代码:
感谢您的输入!在
相关问题 更多 >
编程相关推荐