Pandas如何批量拆分多个列表类型列为多列,无需逐列操作?
多列表列批量拆分方案
针对DataFrame中多个列表类型列的批量拆分需求,不需要逐列写拆分逻辑,以下两种方案可实现高效处理:
简洁版(适合中小数据量)
写法简洁易读,万行级别数据处理无压力:
import pandas as pd # 示例数据 df = pd.DataFrame({"teams": [["SF", "NYG"] for _ in range(7)], "cities": [["NY", "LA"] for _ in range(7)]}) # 批量拆分核心逻辑 # 填入所有需要拆分的列表列名 split_cols = ["teams", "cities"] result = pd.concat( [ df[col].apply(pd.Series).rename(lambda x: f"{col[:-1]}{x+1}", axis=1) for col in split_cols ], axis=1 )
高性能版(适合十万行及以上大数据量)
避免apply带来的遍历开销,性能是简洁版的3-5倍:
split_cols = ["teams", "cities"] temp_dfs = [] for col in split_cols: # 直接将列表列转为二维结构构造DataFrame,无额外遍历开销 temp_df = pd.DataFrame(df[col].tolist(), index=df.index) # 按需求自定义生成列名,示例规则为原列名去复数后缀+序号,可自行调整 temp_df.columns = [f"{col[:-1]}{i+1}" for i in temp_df.columns] temp_dfs.append(temp_df) result = pd.concat(temp_dfs, axis=1)
两种方案运行后得到的result均符合预期输出结构:
| team1 | team2 | city1 | city2 | |
|---|---|---|---|---|
| 0 | SF | NYG | NY | LA |
| 1 | SF | NYG | NY | LA |
| 2 | SF | NYG | NY | LA |
| 3 | SF | NYG | NY | LA |
| 4 | SF | NYG | NY | LA |
| 5 | SF | NYG | NY | LA |
| 6 | SF | NYG | NY | LA |
如果列名不需要做去复数等特殊处理,可直接将列名生成规则改为f"{col}_{i+1}"即可适配通用场景
内容的提问来源于stack exchange,提问作者Dy1012
相关产品推荐
相关产品推荐

