You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含多字符串的N×M矩阵转换为Pandas DataFrame?

解决矩阵单元格转多列DataFrame的问题

问题分析

你读取的sample_layout是N×M的矩阵结构(行标识如A/B,列标识如1/2),每个单元格包含12个字符串。直接用pd.DataFrame(sample_layout, columns=column_names)无效,因为原数据的列数和指定的12列不匹配,且每个单元格的内容是嵌套的字符串集合,需要先拆解重塑。

解决方案步骤

  • 读取原始矩阵并保留行列标识
    确保读取时正确保留行、列的孔位标识:

    import pandas as pd
    
    # 第一列作为行索引(A/B),第一行作为列名(1/2)
    sample_layout = pd.read_excel("file_name.xlsx", engine="openpyxl", sheet_name=1, index_col=0)
    
  • 将矩阵重塑为长格式
    把N×M的矩阵转换成包含孔位标识和单元格内容的长表:

    # 堆叠矩阵,生成包含行、列索引和对应内容的数据集
    stacked = sample_layout.stack().reset_index()
    stacked.columns = ["row_id", "col_id", "raw_data"]
    
  • 拆解单元格内的12个字符串为多列
    根据单元格内字符串的分隔方式选择对应方法:

    1. 若字符串用分隔符(如逗号、换行)分隔:
      # 替换分隔符为你实际使用的符号(比如"\n"代表换行)
      split_data = stacked["raw_data"].str.split(",", expand=True)
      
      column_names = ['ID','sample_ID','sample_type','pilot_batch','tissue','hide_ID','hide_replicate','avg loaded weight mg','avg empty weight mg','net weight mg','date','operator']
      split_data.columns = column_names
      
      # 合并孔位标识和拆分后的列
      df_converted = pd.concat([stacked[["row_id", "col_id"]], split_data], axis=1)
      
    2. 若单元格内容本身是列表/数组格式:
      column_names = ['ID','sample_ID','sample_type','pilot_batch','tissue','hide_ID','hide_replicate','avg loaded weight mg','avg empty weight mg','net weight mg','date','operator']
      split_data = pd.DataFrame(stacked["raw_data"].tolist(), columns=column_names)
      
      df_converted = pd.concat([stacked[["row_id", "col_id"]], split_data], axis=1)
      

关键注意点

  • 读取Excel时,index_col=0参数保证第一列的行标识(A/B)被保留为索引
  • 拆分字符串时必须使用实际的分隔符,否则会导致拆分结果异常
  • 最终的df_converted会包含孔位的行/列标识,以及你需要的12个数据列,符合预期格式

内容的提问来源于stack exchange,提问作者wew044

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 11:56:04