如何将不等宽情感分析词典wide dataframe从宽格式转换为long format
解决方案
下面分别给出R和Python两种常用数据分析环境下的极简实现方案:
R 实现(基于tidyverse)
依赖tidyverse套件的pivot_longer函数即可一步完成转换:
- 加载依赖:
library(tidyverse) - 示例数据构造(可跳过,直接替换为你的实际数据):
wide_df <- tibble( word = c("开心", "难过"), alternativeform1 = c("高兴", "伤心"), alternativeform2 = c("开心到飞起", NA), value = c(1, -1) )
- 转换代码:
long_df <- wide_df %>% pivot_longer( cols = starts_with(c("word", "alternativeform")), values_to = "word", values_drop_na = TRUE ) %>% select(word, value)
说明:values_drop_na参数会自动过滤掉变体列的NA行,无需额外写过滤逻辑;如果后续新增更多变体列,starts_with规则会自动匹配所有符合命名规则的列,不用修改代码。
Python 实现(基于pandas)
用melt方法结合空值过滤即可完成:
- 加载依赖:
import pandas as pd - 示例数据构造(可跳过,直接替换为你的实际数据):
import numpy as np wide_df = pd.DataFrame({ "word": ["开心", "难过"], "alternativeform1": ["高兴", "伤心"], "alternativeform2": ["开心到飞起", np.nan], "value": [1, -1] })
- 转换代码:
long_df = (wide_df .melt( id_vars="value", value_vars=["word", "alternativeform1", "alternativeform2"], value_name="word" ) .dropna(subset=["word"]) .loc[:, ["word", "value"]] .reset_index(drop=True) )
说明:如果变体列数量不固定,可把value_vars替换为[col for col in wide_df.columns if col != "value"],自动识别所有需要转换的词列,适配性更强。
内容的提问来源于stack exchange,提问作者Honza88
相关产品推荐
相关产品推荐

