2016-09-03 6 views
11

मैं विज्ञानकिट से TfidfVectorizer का उपयोग कर रहा हूं- टेक्स्ट डेटा से कुछ फीचर निष्कर्षण सीखना सीखता हूं। मेरे पास एक स्कोर के साथ एक CSV फ़ाइल है (+1 या -1 हो सकती है) और एक समीक्षा (टेक्स्ट)। मैंने इस डेटा को डेटाफ्रेम में खींच लिया ताकि मैं वेक्टरोरिज़र चला सकूं।विज्ञान में सीखने के लिए TfidfVectorizer: ValueError: np.nan एक अमान्य दस्तावेज़

Traceback (most recent call last): 
    File "/home/PycharmProjects/Review/src/feature_extraction.py", line 16, in <module> 
x = v.fit_transform(df['Review']) 
File "/home/b/hw1/local/lib/python2.7/site- packages/sklearn/feature_extraction/text.py", line 1305, in fit_transform 
    X = super(TfidfVectorizer, self).fit_transform(raw_documents) 
File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 817, in fit_transform 
self.fixed_vocabulary_) 
File "/home/b/work/local/lib/python2.7/site- packages/sklearn/feature_extraction/text.py", line 752, in _count_vocab 
    for feature in analyze(doc): 
File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 238, in <lambda> 
tokenize(preprocess(self.decode(doc))), stop_words) 
File "/home/b/work/local/lib/python2.7/site-packages/sklearn/feature_extraction/text.py", line 118, in decode 
raise ValueError("np.nan is an invalid document, expected byte or " 
ValueError: np.nan is an invalid document, expected byte or unicode string. 

मैं कुछ भी करने के लिए CSV फ़ाइल और DataFrame जाँच की है कि के रूप में NaN लेकिन मैं कर सकते हैं पढ़ा जा रहा है:

import pandas as pd 
import numpy as np 
from sklearn.feature_extraction.text import TfidfVectorizer 

df = pd.read_csv("train_new.csv", 
      names = ['Score', 'Review'], sep=',') 

# x = df['Review'] == np.nan 
# 
# print x.to_csv(path='FindNaN.csv', sep=',', na_rep = 'string', index=True) 
# 
# print df.isnull().values.any() 

v = TfidfVectorizer(decode_error='replace', encoding='utf-8') 
x = v.fit_transform(df['Review']) 

यह त्रुटि मैं के लिए ट्रैस है:

यह मेरा कोड है कुछ भी नहीं मिला। 18000 पंक्तियां हैं, जिनमें से कोई भी isnan को सही के रूप में वापस नहीं करता है।

यह वही है df['Review'].head() लग रहा है की तरह है:

0 This book is such a life saver. It has been s... 
    1 I bought this a few times for my older son and... 
    2 This is great for basics, but I wish the space... 
    3 This book is perfect! I'm a first time new mo... 
    4 During your postpartum stay at the hospital th... 
    Name: Review, dtype: object 
+1

आप 'df [ 'समीक्षा']' के सिर को प्रदर्शित कर सके मुझे अपने dataframe अंदर पाठ की एन्कोडिंग से संबंधित है के रूप में यह लग रहा है:

x = v.fit_transform(df['Review'].values.astype('U')) ## Even astype(str) would work 
TFIDF vectorizer के डॉक्टर पृष्ठ से

सभी से ज्यादा? –

+0

ज़रूर। मैंने अभी अपनी पोस्ट संपादित की है। – boltthrower

+0

और 'टाइप (डीएफ [' समीक्षा ']। Iloc [0]) '? –

उत्तर

28

आप dtype के रूप में स्पष्ट रूप से ट्रैस बैक में बताया गया है objectunicode स्ट्रिंग में बदलने की जरूरत है।

fit_transform(raw_documents, y=None)

Parameters: raw_documents : iterable
an iterable which yields either str, unicode or file objects

+1

देता है यह काम करता है। बहुत बहुत धन्यवाद। इसे सही उत्तर के रूप में चिह्नित करना। – boltthrower

संबंधित मुद्दे