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

如何使用循环拼接DataFrame中的多列值?(Python)

解决方法:将多列艺术家信息整理为单列(过滤无效值)

假设你的DataFrame命名为df,我们可以用pandas的stack()方法快速处理这种多列转单列并过滤无效值的需求,步骤如下:

步骤1:堆叠列并过滤无效值

stack()会把多列转换成行索引的层级,之后我们可以直接过滤掉值为?的行:

import pandas as pd

# 假设你的原始DataFrame是df
result = df.stack()[df.stack() != '?'].reset_index(drop=True).to_frame(name='Artist')

步骤2:查看结果

运行上面的代码后,result就是你想要的单列DataFrame,示例输出会是:

Artist
0  Lady Antebellum
1    Reba McEntire
2    Wanda Jackson
3  Carrie Underwood
4  The Bellamy Brothers
5       Keith Urban
6    Miranda Lambert
7         Sam Hunt
8       Johnny Cash
9       Johnny Cash
10      June Carter
11      Highwaymen
12     Loretta Lynn
13     Sissy Spacek
14     Loretta Lynn
15      Sheryl Crow
16    Miranda Lambert
17     Charley Pride

代码逻辑解释

  • df.stack():把原DataFrame的列(Artist_1/2/3)转换成行的层级,每一行的多个艺术家值会拆分成多行记录
  • [df.stack() != '?']:过滤掉所有值为?的无效记录
  • reset_index(drop=True):去掉堆叠后产生的多余索引,重置成连续的索引
  • to_frame(name='Artist'):把 Series 转换成DataFrame,并设置列名为Artist

如果你偏好另一种写法,也可以用melt方法实现相同效果:

result = df.melt(var_name='Artist_col', value_name='Artist')
result = result[result['Artist'] != '?'].drop(columns='Artist_col').reset_index(drop=True)

两种方法都能达到你想要的效果,stack()相对更简洁一些~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:33