多标签通信的列表理解

2024-04-25 00:27:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了下面的代码,它的工作很好,但我正在努力使更多的可读性和优化的代码,为此,我要取代我的代码列表理解,以取代所有的“如果条件”寻找情感类(在双**)。你知道吗

尝试将**代码优化为列表理解:

emotion_classes = ["Joy", "Fear", "Anger", "Surprise","Sadness", "Trust","Anticipation"]

[increaseCounterofJoy,increaseCounterofFear, for emotion in emotion_classes]

代码

for idx in range(len(df_split)):

    iter_df = df_split[idx]

    i = 0

    final_df = pd.DataFrame(columns=("Date","Joy", "Fear", "Anger", "Surprise","Sadness", "Trust","Anticipation"))

    for index, row in iter_df.iterrows():

        **if iter_df["Emotion Class"] = "Joy":
            row["Joy"] = +1
        if iter_df["Emotion Class"] = "Fear":
            row["Fear"] = +1  
        if iter_df["Emotion Class"] = "Anger":
            row["Anger"] = +1
        if iter_df["Emotion Class"] = "Surprise":
            row["Surprise"] = +1
        if iter_df["Emotion Class"] = "Sadness":
            row["Sadness"] = +1
        if iter_df["Emotion Class"] = "Trust":
            row["Trust"] = +1
        if iter_df["Emotion Class"] = "Anticipation":
            row["Anticipation"] = +1**

        final_df.loc[i] = row["Date"], row["Joy"], row["Fear"], row["Anger"], row["Surprise"], row["Sadness"], row["Trust"], row["Anticipation"]

    i = i + 1

Tags: 代码dfifclassrowsurpriseemotioniter
3条回答

这不是一个列表理解有用的任务。只需使用传统的for循环:

emotion_classes = [
    "Joy", "Fear", "Anger", "Surprise",
    "Sadness", "Trust","Anticipation",
]

for index, row in iter_df.iterrows():
    for emotion in emotion_classes:
        if iter_df["Emotion Class"] == emotion:
            row[emotion] += 1

你的代码中有几个输入错误。在测试中使用=而不是==。我假设您想要增加row中的适当字段,而不是仅仅将它们设置为+1。你知道吗

也许是一张透视表?你知道吗

In [1]: iter_df
Out[1]:
   Date Emotion Class
0     1           Joy
1     1         Peace
2     2           Joy
3     3         Peace
4     3         Peace

In [2]: iter_df['ones'] = 1

In [3]: pd.pivot_table(iter_df, index='Date', columns='Emotion Class', values='ones', margins=False, aggfunc='sum')
    ...:
Out[3]:
Emotion Class  Joy  Peace
Date
1              1.0    1.0
2              1.0    NaN
3              NaN    2.0

pm2ring的答案是可行的,但我想知道你是否能把它简化为:

for index, row in iter_df.iterrows():    
    row[iter_df["Emotion Class"]] += 1

相关问题 更多 >