如何解决Get-Tu虚拟内存错误

2024-06-16 11:19:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python,我有大约100万条记录和大约50列的数据集

其中一些列具有不同的类型(例如IssueCode列可以有7000个不同的代码,另一个列SolutionCode可以有1000个代码)

我试图建立一个预测模型。在

因此,我必须使用get_dummies来转换数据

导致这个错误的记忆

File "C:\Users\am\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\reshape\reshape.py", line 963, in _get_dummies_1d dummy_mat = np.eye(number_of_cols, dtype=dtype).take(codes, axis=0)

MemoryError

我尝试了另一种解决方案,即保持列不使用一种热编码

现在我在构建模型时遇到了这个错误

ValueError: could not convert string to float: 'ABC'

我检查过这个解决方案

get_dummies python memory error

我把所有的列都转换成了int8,但仍然有相同的错误

df = pd.concat([df.drop('IssueCode', 1), pd.get_dummies(df['IssueCode'],prefix = 'IssueCode_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('SolutionCode', 1), pd.get_dummies(df['SolutionCode'],prefix = 'SolutionCode_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col1', 1), pd.get_dummies(df['Col1'],prefix = 'Col1_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col2', 1), pd.get_dummies(df['Col2'],prefix = 'Col2_').astype(np.int8)], axis=1)
df = pd.concat([df.drop('Col3', 1), pd.get_dummies(df['Col3'],prefix = 'Col3_').astype(np.int8)], axis=1)

由于内存错误,我无法获取_dummies,也无法由于string to float错误而无法获取\u dummies

如何解决这个问题

这是我的密码

^{pr2}$

Tags: dfgetprefix错误npdropcol1int8
1条回答
网友
1楼 · 发布于 2024-06-16 11:19:32

您可能要做的第一件事是为数据帧列指定适当的数据类型,以减少加载的数据帧的内存使用(参见https://www.dataquest.io/blog/pandas-big-data/)。在

对于一个热编码,内存问题的一个直接解决方案是使用稀疏数据类型而不是常规数据类型(有关更多详细信息,请参见doc)。这可以通过以下方式实现:

df = pd.get_dummies(df, columns=["IssueCode", "SolutionCode", "Col1", "Col2", "Col3"], 
                    sparse=True, axis=1)

不过,我不确定pandas'稀疏表示是否与sklearn一起工作。如果不起作用,可以尝试使用sklearnOneHotEncoder,默认情况下它也提供稀疏表示。在

还有其他分类特征的编码技术可以减少维数(以及内存使用),但需要更多的工作,例如将分类特征的值合并到更大的组中。在

相关问题 更多 >