У меня есть фрейм данных с записями 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, то оно содержит текст, верно?