Pandas - NameError: имя 'df2' не определено - PullRequest
0 голосов
/ 14 июля 2020

Для текущего проекта я выполняю несколько итераций Pandas DataFrame и планирую напечатать переменную df2.

При вызове строки print(df2) я, однако, получаю ошибка NameError: name 'df2' is not defined. Я уже искал решения, но пока ничего не нашел. Есть ли какая-нибудь хитрая настройка для выполнения этого запуска?

Соответствующий раздел кода выглядит так:

# Open the file to write to
with open('sp500-1.csv', 'w', newline='') as file:
    writer = csv.writer(file)

    # Write headers
    writer.writerow(["Section", "TFI"])

    # Loop over the JSON objects
    for i in ['txt_pro','txt_con','txt_adviceMgmt','txt_main']:

        # Loop over the common words inside the JSON object
        common_words = get_top_n_bigram_Group2(df[i], 500)
        for word in common_words:

            # Print and write row.
            print(df2)
            writer.writerow([df2])

А код, определяющий df2, выглядит следующим образом:

def get_top_n_bigram_Group2(corpus, n=None):
    # settings that you use for count vectorizer will go here
    tfidf_vectorizer=TfidfVectorizer(ngram_range=(2, 2), stop_words='english', use_idf=True).fit(corpus)

    # just send in all your docs here
    tfidf_vectorizer_vectors=tfidf_vectorizer.fit_transform(corpus)

    # get the first vector out (for the first document)
    first_vector_tfidfvectorizer=tfidf_vectorizer_vectors[0]

    # place tf-idf values in a pandas data frame
    df1 = pd.DataFrame(first_vector_tfidfvectorizer.T.todense(), index=tfidf_vectorizer.get_feature_names(), columns=["tfidf"])
    df2 = df1.sort_values(by=["tfidf"],ascending=False)

    return df2

Ответы [ 3 ]

1 голос
/ 14 июля 2020

Это происходит потому, что df2 определен внутри вашей функции и подчиняется python области переменных , поэтому он существует только внутри определения вашей функции.

Поскольку вы возвращаете его и передаете другой имя для него:

common_words = get_top_n_bigram_Group2(df[i], 500)

Итак, вы возвращаете df2 значение и передаете его как common_words

И затем вы повторяются по нему:

for word in common_words:

Следовательно, вы должны использовать word вместо df2 в функциях печати и писателя.

1 голос
/ 14 июля 2020

Эй, это простой вопрос. Смотрите, как функция возвращает переменную, но возвращается к той переменной, в которой она вызывается.

# Open the file to write to
  with open('sp500-1.csv', 'w', newline='') as file:
writer = csv.writer(file)

# Write headers
writer.writerow(["Section", "TFI"])

# Loop over the JSON objects
for i in ['txt_pro','txt_con','txt_adviceMgmt','txt_main']:

    # Loop over the common words inside the JSON object
    common_words = get_top_n_bigram_Group2(df[i], 500)
    for word in common_words:

        # Print and write row.
        print(common_words)
        writer.writerow([word])
0 голосов
/ 14 июля 2020

Ну, когда вы запускали get_top_n_bigram_Group2, вы сохранили df2 в common_words.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...