Pythonic方法将pandas DataFrame每行拆分为独立DataFrame的方案推荐
最佳Pythonic实现方案
推荐优先使用列表推导式+iloc切片的方式实现,把拆分后的行级DataFrame统一存储在列表中,无需提前感知原DataFrame的行数,完全适配动态行数场景,代码简洁易维护。
核心实现代码
import pandas as pd from numpy.random import randn # 原有示例DataFrame df = pd.DataFrame(randn(3,3), columns=['column 1', 'column 2', 'column 3'], index = ['row 1', 'row 2', 'row 3']) # 核心拆分逻辑:每一行转为独立DataFrame,存入列表 row_dfs = [df.iloc[[i]] for i in range(len(df))]
注意:这里使用iloc[[i]]而非iloc[i],是为了保证返回结果为DataFrame类型而非Series,自动保留原有的列信息。
访问与操作方式
拆分后的所有行DataFrame都可以通过列表下标直接访问,支持所有pandas DataFrame原生操作:
# 访问第一个行DataFrame print("dataframe 1:") print(row_dfs[0]) # 单独修改第二个行DataFrame的某一列值,不会影响原DF和其他行DF row_dfs[1]['column 1'] = 999 print("修改后的dataframe 2:") print(row_dfs[1])
可选方案:按原索引存储为字典
如果原DataFrame的索引有业务含义,也可以用字典存储,方便通过原索引直接取值:
row_df_dict = {idx: df.loc[[idx]] for idx in df.index} # 直接通过原索引访问 print(row_df_dict['row 3'])
方案优势
- 完全适配任意行数的原DataFrame,无需提前固定长度
- 所有拆分后的DataFrame完整保留原列名、原索引信息
- 性能优于
iterrows遍历方案,代码简洁符合Pythonic风格 - 列表/字典是Python原生数据结构,操作无额外学习成本,避免动态生成变量导致的命名空间污染问题
内容的提问来源于stack exchange,提问作者Lucas Schwartz
相关产品推荐
相关产品推荐

