Как пропустить np.nan при переборе фрейма данных для анализа настроений - PullRequest
0 голосов
/ 07 марта 2019

У меня есть фрейм данных с записями 201279, последний столбец помечен как «текст» с отзывами клиентов.Проблема в том, что большинство из них пропускают значения и появляются как NaN.

Я прочитал интересную информацию из этого вопроса: Python numpy.nan и логические функции: неправильные результаты

, и я попытался применить его к своей проблеме:

    df1.columns

Index(['id', 'sku', 'title', 'reviewCount', 'commentCount', 'averageRating',
       'date', 'time', 'ProductName', 'CountOfBigTransactions', 'ClassID',
       'Weight', 'Width', 'Depth', 'Height', 'LifeCycleName', 'FinishName',
       'Color', 'Season', 'SizeOrUtility', 'Material', 'CountryOfOrigin',
       'Quartile', 'display-name', 'online-flag', 'long-description', 'text'],
      dtype='object')

Я попытался поэкспериментировать, выполнив это: df ['firstName'] [202360] == np.nan

, который возвращает False, но на самом деле этот индекс содержит np.nan.

Итак, я искал ответ, прочитал вопрос, который я связал, и увидел, что

np.bool(df1['text'][201279])==True

- верное утверждение.Я подумал, хорошо, я могу работать с этим.

Итак, вот мой код:

from textblob import TextBlob
import string

def remove_num_punct(aText):
    p = string.punctuation
    d = string.digits
    j = p + d
    table = str.maketrans(j, len(j)* ' ')
    return aText.translate(table)

#Process text
aList = []
for text in df1['text']:
    if np.bool(df1['text'])==True:
        aList.append(np.nan)
    else:
        b = remove_num_punct(text)
        pol = TextBlob(b).sentiment.polarity
        aList.append(pol)

Тогда я бы просто преобразовал aList с чувством в pd.DataFrame исоедините его с df1, а затем вмените недостающие значения с K-ближайшими соседями.

Моя проблема в том, что небольшая процедура, которую я сделал, выдает ошибку значения

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Так что я не совсем уверен, что еще можно попробовать.Заранее спасибо!

РЕДАКТИРОВАТЬ: я пробовал это:

i = 0
aList = []
for txt in df1['text'].isnull():
    i += 1
    if txt == True:
        aList.append(np.nan)

, который правильно заполняет список NaN.

Но это дает мне другую ошибку:

i = 0
aList = []
for txt in df1['text'].isnull():
    if txt == True:
        aList.append(np.nan)
    else:
        b = remove_num_punct(df1['text'][i])
        pol = TextBlob(b).sentiment.polarity
        aList.append(pol)
        i+=1

AttributeError: 'float' object has no attribute 'translate'

Что не имеет смысла, поскольку, если это не NaN, то оно содержит текст, верно?

Ответы [ 2 ]

1 голос
/ 07 марта 2019
import pandas as pd
import numpy as np

df = pd.DataFrame({'age': [5, 6, np.NaN],
                   'born': [pd.NaT, pd.Timestamp('1939-05-27'), pd.Timestamp('1940-04-25')],
                   'name': ['Alfred', 'Batman', ''],
                   'toy': [None, 'Batmobile', 'Joker']})

df1 = df['toy']
for i in range(len(df1)):
    if not df1[i]:
        df2 = df1.drop(i)

df2

вы можете попытаться таким образом обработать текст, который является нулевым

0 голосов
/ 07 марта 2019

Я исправил это, мне пришлось переместить i += 1 обратно из отступа else в отступ for:

i = 0
aList = []
for txt in df1['text'].isnull():
    if txt == True:
        aList.append(np.nan)
    else:
        b = remove_num_punct(df1['text'][i])
        pol = TextBlob(b).sentiment.polarity
        aList.append(pol)
    i+=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...