如何在低版本Pandas中拆分列值并生成新DataFrame
低版本Pandas实现字符串拆分展开的方法
针对你的需求,当Pandas版本过低不支持explode方法时,可以用以下两种方式实现ColB的拆分与ColA的对应展开:
先构造示例数据
import pandas as pd df = pd.DataFrame({ 'ColA': ['A', 'A', 'B', 'C'], 'ColB': ['hg_gh | fg_tr | yu_jhd', 'hg_dh | fg_fr', 'hg_th | fg_er | yu_jkd', 'hg_zh | fg_qr'] })
方法1:apply结合pd.Series与stack
# 先拆分ColB的字符串,再通过apply生成对应Series,最后堆叠整理格式 result = (df.assign(ColB=df['ColB'].str.split(' | ')) .apply(lambda x: pd.Series(x['ColB'], index=[x['ColA']]*len(x['ColB'])), axis=1) .stack() .reset_index(level=0) .rename(columns={0: 'ColB'}) .reset_index(drop=True))
方法2:列表推导式(高效直观)
这种方式遍历原DataFrame的每一行,拆分后直接构造新数据列表,适合处理大数据量:
rows = [] for _, row in df.iterrows(): # 按分隔符拆分ColB split_vals = row['ColB'].split(' | ') # 每个拆分值对应原ColA,添加到列表 for val in split_vals: rows.append({'ColA': row['ColA'], 'ColB': val}) # 转换为目标DataFrame result = pd.DataFrame(rows)
执行上述任意一种方法后,result即为你需要的展开后DataFrame。
内容的提问来源于stack exchange,提问作者Rakshu
相关产品推荐
相关产品推荐

