首页 > 解决方案 > 在 Pandas 中重命名多个列值

问题描述

我将客户评论存储在 Pandas 列“情绪”中。这是结果data['Sentiment'].unique()

array(['Negative', 'Positive', '?', 'Neutral', 'nan', 'positive',
       'neutral', 'negative', 'Neg', 'ppos', 'ne'], dtype=object)

我正在尝试将值分组为“正”、“负”和“中性”,并创建了三个映射列表:

positive = ['Positive','positive', 'ppos']
negative = ['Negative', 'negative', 'Neg']
neutral = ['Neutral', 'neutral', 'ne']

其他一切都应该是NAn。我尝试了iterrows()以下方法:

for idx, row in data.iterrows():
    if row['Sentiment'].isin(positive):
        row['Sentiment'] == 'positive'
               ...

不起作用,而且似乎也没有效率。我尝试了系列和布尔值,这似乎是一种很有前途的方法,但我真的想知道是否有一些简洁的解决方法。

标签: pythonpandasreplacerename

解决方案


使用numpy.select。将条件作为第一个参数传递,与条件对应的值作为第二个参数,不匹配任何条件的默认值。

import numpy as np

conditions = [
    df['Sentiment'].isin(positive),
    df['Sentiment'].isin(neutral),
    df['Sentiment'].isin(negative)
]
values = ['positive', 'neutral', 'negative']

df['Sentiment'] = np.select(conditions, values, np.nan)

推荐阅读