如何使用循环拼接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
相关产品推荐
相关产品推荐

