如何基于已有DataFrame的逗号分隔行值创建新Pandas DataFrame
解决方案:拆分Pandas DataFrame行中的逗号分隔字符串生成子DataFrame
我来帮你搞定这个需求!要把原DataFrame每一行里的逗号分隔字符串拆分成配对的独立行,生成对应的子DataFrame,我们可以用Pandas的字符串处理工具加上简单的循环来实现,具体步骤如下:
1. 先创建示例输入DataFrame
首先我们先还原你给出的输入数据:
import pandas as pd # 创建输入DataFrame df = pd.DataFrame({ "COLUMN_1": ["Marvel", "DC"], "COLUMN_2": ["Hulk, Thor, Ironman", "Spiderman, Batman, Flash"], "COLUMN_3": ["1,7,8", "18, 74, 88"] })
2. 定义处理单行的函数
我们写一个函数,接收原DataFrame的一行数据,拆分COLUMN_2和COLUMN_3里的逗号分隔字符串,然后生成对应的子DataFrame:
def split_row_to_df(row): # 拆分COLUMN_2,同时去除可能的空格 column2_vals = [val.strip() for val in row["COLUMN_2"].split(",")] # 拆分COLUMN_3,同样去除空格并转为数值类型(可选,根据你的需求调整) column3_vals = [int(val.strip()) for val in row["COLUMN_3"].split(",")] # 创建子DataFrame sub_df = pd.DataFrame({ "COLUMN_1": column2_vals, "COLUMN_2": column3_vals }) return sub_df
3. 遍历原DataFrame生成子DataFrames
接下来我们遍历原DataFrame的每一行,调用上面的函数,就能得到你想要的子DataFrames:
# 存储所有子DataFrame的列表(可选,你也可以直接处理每一个子DF) sub_dfs = [] for idx, row in df.iterrows(): sub_df = split_row_to_df(row) sub_dfs.append(sub_df) # 打印每个子DataFrame查看结果 print(f"第{idx+1}行对应的子DataFrame:") print(sub_df) print("-"*30)
运行结果
运行上面的代码后,你会得到:
第1行对应的子DataFrame:
COLUMN_1 COLUMN_2
0 Hulk 1
1 Thor 7
2 Ironman 8第2行对应的子DataFrame:
COLUMN_1 COLUMN_2
0 Spiderman 18
1 Batman 74
2 Flash 88
补充说明
- 如果
COLUMN_3的数值不需要转为整数,可以把int(val.strip())改成val.strip()即可; - 如果原DataFrame有更多行,这个方法也能通用,只要确保每一行的
COLUMN_2和COLUMN_3的逗号分隔元素数量一致就行; - 如果你不想存储所有子DataFrame,也可以在循环里直接对每个子DF进行后续处理(比如保存为CSV、进一步分析等)。
内容的提问来源于stack exchange,提问作者flyingJ
相关产品推荐
相关产品推荐

