【问题标题】:pandas dataframe memory python熊猫数据框内存python
【发布时间】:2017-06-14 11:14:24
【问题描述】:

我想将稀疏矩阵 (156060x11780) 转换为数据帧,但出现内存错误,这是我的代码

vect = TfidfVectorizer(sublinear_tf=True, analyzer='word', 
                       stop_words='english' , tokenizer=tokenize,
                       strip_accents = 'ascii') 

X = vect.fit_transform(df.pop('Phrase')).toarray()

for i, col in enumerate(vect.get_feature_names()):
    df[col] = X[:, i]

X = vect.fit_transform(df.pop('Phrase')).toarray() 有问题。我该如何解决?

【问题讨论】:

  • 这对你有用吗X = vect.fit_transform(df.pop('Phrase')).todense()
  • 否 :( 我之前试过
  • 有多少内存可用?
  • 12 我用的是linux

标签: python pandas memory dataframe scikit-learn


【解决方案1】:

试试这个:

from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer(sublinear_tf=True, analyzer='word', stop_words='english',
                       tokenizer=tokenize,
                       strip_accents='ascii',dtype=np.float16)
X = vect.fit_transform(df.pop('Phrase'))  # NOTE: `.toarray()` was removed


for i, col in enumerate(vect.get_feature_names()):
    df[col] = pd.SparseSeries(X[:, i].toarray().reshape(-1,), fill_value=0)

更新:对于 Pandas 0.20+,我们可以直接从稀疏数组构造 SparseDataFrame

from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer(sublinear_tf=True, analyzer='word', stop_words='english',
                       tokenizer=tokenize,
                       strip_accents='ascii',dtype=np.float16)

df = pd.SparseDataFrame(vect.fit_transform(df.pop('Phrase')),
                        columns=vect.get_feature_names(),
                        index=df.index)

2022-01-22 更新在现代版本的 Pandas 中,pd.SparseDataFrame 方法已被弃用,因此请改用 pd.DataFrame.sparse.from_spmatrix()

【讨论】:

  • thaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  • 在新版本的 Pandas 中,SparseDataFrame() 不再可用。见stackoverflow.com/a/61040020/5936342
  • @revy,感谢您指出这一点!我已经更新了我的答案)
猜你喜欢
  • 1970-01-01
  • 2016-10-09
  • 2016-10-14
  • 2016-07-27
  • 2012-12-22
  • 2022-01-04
  • 2021-05-14
  • 2016-01-07
  • 2018-03-07
相关资源
最近更新 更多