Python:使用astype('U')将文本数据转换为Unicode时如何避免MemoryError。



我最近正在处理一个安静的大数据集,我打算使用tfidfvectorizer进行分析。

实现TFIDFVECTORIZER时,有一些有关MemoryError的帖子,但是,在我的情况下, 在我将数据馈送到tfidfvectorizer中之前发生。这是我的代码。

  1. 阅读数据

    data = pd.read_csv(...)
    data['description'] is the text content
    
  2. 过程数据

    from sklearn.feature_extraction.text import TfidfVectorizer
    description_vectorizer = TfidfVectorizer(max_features=500,
                                         min_df=0.2,                                    
                                         ngram_range=(2, 3),
                                         preprocessor=preprocessor,
                                         stop_words='english')
    description_vectorizer.fit(data.description.values.astype('U'))
    

拟合tfidfvectorizer时,这里的许多帖子都讨论了MemoryError,但是我发现当我将数据转换为Unicode时,即在此步骤中: data.description.description.values.values.astype.astype('u U'(,发生内存。

因此,有关如何调整TFIDFVECTORIZER中的参数的策略是在我的情况下很有用。

有人以前遇到过这个问题并知道如何修复它?非常感谢。

我知道,这个线程很旧,但是在遇到同样的问题并且没有找到任何答案之后,我希望这会帮助某人在同一位置找到他或她自己。p>解决方案实际上很简单,它只是代码中的一个小错误:而不是将astype()应用于这样的numpy阵列:

data.description.values.astype('U')

只是交换语句,然后将.astype()应用于熊猫系列:

data.description.astype('U').values

希望这会有所帮助!

如果有人想知道,我找到了一种方法Python:使用.loc选择数据产生不同的结果

也许这是一个愚蠢的问题,请让我知道,如果您认为我应该删除它,谢谢。

我也经历了此错误。astype函数实际上返回如此之快,实际上分配了很少的内存,我只能假设对内存需求的先发制计算失败,无法找到连续的内存块,或者是一个错误。

我在如何 solve 上找不到太多问题,因此i 避免通过完全删除astype转换并将基础数据集转换为Unicode来在由熊猫加载之前。

最新更新