首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在遍历数据帧进行情感分析时跳过np.nan

如何在遍历数据帧进行情感分析时跳过np.nan
EN

Stack Overflow用户
提问于 2019-03-07 12:47:32
回答 2查看 149关注 0票数 0

我有一个包含201279个条目的数据框,最后一列是带有客户评论的“文本”。问题是它们中的大多数都缺少值,并以NaN的形式出现。

我从这个问题中读到了一些有趣的信息:Python numpy.nan and logical functions: wrong results

我试着把它应用到我的问题上:

代码语言:javascript
复制
    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‘== np.nan

它返回False,但该索引确实包含一个np.nan。

因此,我寻找答案,通读我链接的问题,并看到

代码语言:javascript
复制
np.bool(df1['text'][201279])==True

是一句正确的话。我想,好吧,我可以带着它跑。

到目前为止,我的代码如下:

代码语言:javascript
复制
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近邻来计算缺失的值。

我的问题是我做的这个小例程抛出了一个值错误

代码语言:javascript
复制
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

所以我真的不确定还能尝试什么。提前感谢!

编辑:我已经尝试过了:

代码语言:javascript
复制
i = 0
aList = []
for txt in df1['text'].isnull():
    i += 1
    if txt == True:
        aList.append(np.nan)

它用NaN正确地填充了列表。

但这给了我一个不同的错误:

代码语言:javascript
复制
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,那么它就包含文本,对吧?

EN

回答 2

Stack Overflow用户

发布于 2019-03-07 14:20:09

代码语言:javascript
复制
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

您可以尝试以这种方式处理为空的文本

票数 1
EN

Stack Overflow用户

发布于 2019-03-07 18:18:53

我修复了它,我必须将i += 1else缩进移回for缩进:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55036276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档