1

数値以外の属性ごとに依存関係の列を作成し、UCI のアダルト データ セット内の数値以外の属性を削除しようとしています。sklearn.feature_extraction.text ライブラリの CountVectorizer を使用しています。しかし、プログラムが「np.nan は無効なドキュメントであり、バイトまたは Unicode 文字列が必要です」と言っているところで行き詰まりました。」

なぜそのエラーが発生するのかを理解したいだけです。誰でも私を助けることができます、ありがとう。

ここに私のコードがあります、

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import CountVectorizer

def check(ex):
    try:
        int(ex)
        return False
    except ValueError:
        return True

feature_cols = ['age', 'workclass', 'fnlwgt', 'education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex', 'capital-gain', 'capital-loss', 'hours-per-week', 'native-country', 'Target']

data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data', header=None, names = feature_cols)

feature_cols.remove('Target')
X = data[feature_cols]
y = data['Target']

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 1)

columns = X.columns

vect = CountVectorizer()

for each in columns:
    if check(X[each][1]):
        temp = X[each]
        X_dtm = pd.DataFrame(vect.fit_transform(temp).toarray(), columns = vect.get_feature_names())
        X = pd.merge(X, X_dtm, how='outer')
        X = X.drop(each, 1)

print X.columns

エラーはこんな感じ

トレースバック (最新の呼び出しが最後): ファイル "/home/amey/prog/pd.py"、41 行目、X_dtm = pd.DataFrame(vect.fit_transform(temp).toarray()、列 = vect.get_feature_names() 内)

ファイル "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/text.py"、817 行目、fit_transform self.fixed_vocabulary_ 内)

ファイル "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/text.py"、752 行目、analyze(doc) の機能の _count_vocab 内:

ファイル "/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/text.py"、238 行目、tokenize(preprocess(self.decode(doc)))、stop_words)

ファイル「/usr/lib/python2.7/dist-packages/sklearn/feature_extraction/text.py」、118行目、デコード中

raise ValueError("np.nan is an invalid document, expected byte or "

ValueError: np.nan は無効なドキュメントです。予期されるバイトまたは Unicode 文字列です。

[終了コード 1 で 3.3 秒で終了]

4

1 に答える 1

0

機能列の機能の一部はnan. したがって、CountVectorizerこれらの機能を使用する前に、これらの値を変更する必要があります。
データをインポートした直後にこれを使用します:

some_variable = your_feature_data.fillna('c')
c= #you can fill it or leave empty as per your choice.
于 2021-10-09T18:43:03.607 に答える