You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.wide_to_long以括号为分隔符返回空DataFrame的问题

解决pd.wide_to_long提取括号内内容的问题

正确转换代码

np.random.seed(0)
df = pd.DataFrame({'A(weekly_2010)': np.random.rand(3),
                   'A(weekly_2011)': np.random.rand(3),
                   'B(weekly_2010)': np.random.rand(3),
                   'B(weekly_2011)': np.random.rand(3),
                   'X' : np.random.randint(3, size=3)})
df['id'] = df.index

# 生成目标格式DataFrame的正确代码
df1 = pd.wide_to_long(df, stubnames=['A', 'B'], i=['id', 'X'], j='year', sep='', suffix=r'\(.+\)').reset_index()

参数说明

  • sep='':列名中A/B(stubname)与括号包裹的年份部分直接相连,无额外分隔符,因此设置为空字符串。
  • suffix=r'\(.+\)':用正则匹配整个括号包裹的内容,确保pandas能正确识别(weekly_2010)这类字符串作为year列的值。
  • i=['id', 'X']:将X和id作为标识列,保证转换后这两列的内容能正确对应每行的A/B数值;最后用reset_index()展开为你需要的扁平化结构。

之前写法失败的原因

  • 尝试的sep='()'、sep='\\()'等写法错误将括号作为分隔符,但实际列名中A/B后直接跟左括号,不存在()格式的分隔符,导致pandas无法匹配拆分规则,返回空DataFrame。
  • 交换i和j参数会让pandas去查找名为year的列,而原数据中无此列,因此触发KeyError。

内容的提问来源于stack exchange,提问作者Karina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:25:18