如何将所有以rf开头的数组列拆分为单独列?
问题描述
表1:
| rf_1 | rf_2 |
|---|---|
| ['abc','a'] | ['abce','cde'] |
| ['abc','cde'] | ['1','2'] |
如何将所有以rf开头的列拆分为单独的列?
最终输出应如下所示:
| rf_1a | rf_1b | rf_2a | rf_2b |
|---|---|---|---|
| 'abc' | 'a' | 'abce' | 'cde' |
| 'abc' | 'cde' | 1 | 2 |
解决方案(基于Python Pandas)
步骤1:处理数据格式
首先要把列中字符串形式的列表转为实际的列表对象:
import pandas as pd import ast # 构造原始数据 df = pd.DataFrame({ 'rf_1': ["['abc','a']", "['abc','cde']"], 'rf_2': ["['abce','cde']", "['1','2']"] }) # 解析字符串为列表 df['rf_1'] = df['rf_1'].apply(ast.literal_eval) df['rf_2'] = df['rf_2'].apply(ast.literal_eval)
步骤2:拆分指定列并重组
筛选出所有以rf开头的列,将每个列的列表拆分为独立列,按原列名+a/b命名:
# 筛选目标列 rf_columns = [col for col in df.columns if col.startswith('rf')] # 拆分并合并结果 final_df = pd.DataFrame() for col in rf_columns: # 将列表拆分为两列,命名规则:原列名+a、原列名+b split_df = pd.DataFrame(df[col].tolist(), columns=[f"{col}a", f"{col}b"]) final_df = pd.concat([final_df, split_df], axis=1) # 转换数值类型(可选) final_df['rf_2a'] = pd.to_numeric(final_df['rf_2a'], errors='ignore') final_df['rf_2b'] = pd.to_numeric(final_df['rf_2b'], errors='ignore')
最终结果
运行代码后,final_df的输出与目标表格一致:
rf_1a rf_1b rf_2a rf_2b 0 abc a abce cde 1 abc cde 1 2
通用适配(列表长度不固定时)
如果列中列表长度不一致,可改用动态命名方式:
final_df = pd.DataFrame() for col in rf_columns: split_df = pd.DataFrame(df[col].tolist()).add_prefix(f"{col}_") final_df = pd.concat([final_df, split_df], axis=1)
此时列名将变为rf_1_0、rf_1_1、rf_2_0这类格式,适配任意长度的列表。
内容的提问来源于stack exchange,提问作者555codewiz
相关产品推荐
相关产品推荐

