如果某些行缺少列中的值,如何应用 TextBlob?
How to apply TextBlob if value in columns are missing for some rows?
我有一个如下所示的数据框:
Text
0 this is amazing
1 nan
2 wow you are great
我想将数据框单元格中的每个单词迭代到 textblob 中,以获取新列中的极性。然而,许多行中有 nan
。
我认为这导致 TextBlob 在新列中为所有行(即使其中包含文本的行)实现极性分数 0.0。
如何 运行 TextBlob.sentiment.polarity 遍历我专栏中的每个文本并创建一个包含极性得分的新专栏?
新的 df 应该是这样的:
Text sentiment
0 this is amazing 0.9
1 nan 0.0
2 wow you are great 0.8
我不关心 nan
所以情绪值可以是 nan
或 0。
当前无效的代码:
for text in df.columns:
a = TextBlob(text)
df['sentiment']=a.sentiment.polarity
print(df.value)
提前谢谢你。
编辑:
要补充一点,不确定这是否有所不同,df 上的索引不会重置,因为 df 的其他部分由相同的索引号组合在一起。
如果您对 nan
有疑问,您可以 apply
您的函数到 Text
列中没有 nan
的行,例如:
mask = df['Text'].notnull() #select the rows without nan
df.loc[mask,'sentiment'] = df.loc[mask,'Text'].apply(lambda x: TextBlob(x).sentiment.polarity)
注意:我没有 TextBlob
,所以我根据您的代码假设 TextBlob(x).sentiment.polarity
可以。
试试这个:
>>> s=pd.Series(['this is amazing',np.NaN,'wow you are great'],name='Text')
>>> s
Out[100]:
0 this is amazing
1 NaN
2 wow you are great
Name: Text, dtype: object
>>> s.apply(lambda x: np.NaN if pd.isnull(x) else TextBlob(x).sentiment.polarity)
Out[101]:
0 0.60
1 NaN
2 0.45
Name: Text, dtype: float64
另一个解决方案:
d = {'text': ['text1', 'text2', 'text3', 'text4', 'text5'], 'desc': ['The weather is nice today in my city.', 'I hate this weather.', 'Nice weather today.', 'Perfect weather today.', np.NaN]}
df = pd.DataFrame(data=d)
print(df)
text desc
0 text1 The weather is nice today in my city.
1 text2 I hate this weather.
2 text3 Nice weather today.
3 text4 Perfect weather today.
4 text5 NaN
使用 TextBlob 应用情绪分析并将结果添加到新列:
df['sentiment'] = df['desc'].apply(lambda x: 'NaN' if pd.isnull(x) else TextBlob(x).sentiment.polarity)
print(df)
text desc sentiment
0 text1 The weather is nice today in my city. 0.6
1 text2 I hate this weather. -0.8
2 text3 Nice weather today. 0.6
3 text4 Perfect weather today. 1
4 text5 NaN NaN
我有一个如下所示的数据框:
Text
0 this is amazing
1 nan
2 wow you are great
我想将数据框单元格中的每个单词迭代到 textblob 中,以获取新列中的极性。然而,许多行中有 nan
。
我认为这导致 TextBlob 在新列中为所有行(即使其中包含文本的行)实现极性分数 0.0。
如何 运行 TextBlob.sentiment.polarity 遍历我专栏中的每个文本并创建一个包含极性得分的新专栏?
新的 df 应该是这样的:
Text sentiment
0 this is amazing 0.9
1 nan 0.0
2 wow you are great 0.8
我不关心 nan
所以情绪值可以是 nan
或 0。
当前无效的代码:
for text in df.columns:
a = TextBlob(text)
df['sentiment']=a.sentiment.polarity
print(df.value)
提前谢谢你。
编辑:
要补充一点,不确定这是否有所不同,df 上的索引不会重置,因为 df 的其他部分由相同的索引号组合在一起。
如果您对 nan
有疑问,您可以 apply
您的函数到 Text
列中没有 nan
的行,例如:
mask = df['Text'].notnull() #select the rows without nan
df.loc[mask,'sentiment'] = df.loc[mask,'Text'].apply(lambda x: TextBlob(x).sentiment.polarity)
注意:我没有 TextBlob
,所以我根据您的代码假设 TextBlob(x).sentiment.polarity
可以。
试试这个:
>>> s=pd.Series(['this is amazing',np.NaN,'wow you are great'],name='Text')
>>> s
Out[100]:
0 this is amazing
1 NaN
2 wow you are great
Name: Text, dtype: object
>>> s.apply(lambda x: np.NaN if pd.isnull(x) else TextBlob(x).sentiment.polarity)
Out[101]:
0 0.60
1 NaN
2 0.45
Name: Text, dtype: float64
另一个解决方案:
d = {'text': ['text1', 'text2', 'text3', 'text4', 'text5'], 'desc': ['The weather is nice today in my city.', 'I hate this weather.', 'Nice weather today.', 'Perfect weather today.', np.NaN]}
df = pd.DataFrame(data=d)
print(df)
text desc
0 text1 The weather is nice today in my city.
1 text2 I hate this weather.
2 text3 Nice weather today.
3 text4 Perfect weather today.
4 text5 NaN
使用 TextBlob 应用情绪分析并将结果添加到新列:
df['sentiment'] = df['desc'].apply(lambda x: 'NaN' if pd.isnull(x) else TextBlob(x).sentiment.polarity)
print(df)
text desc sentiment
0 text1 The weather is nice today in my city. 0.6
1 text2 I hate this weather. -0.8
2 text3 Nice weather today. 0.6
3 text4 Perfect weather today. 1
4 text5 NaN NaN