如何将含多字符串的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个字符串为多列
根据单元格内字符串的分隔方式选择对应方法:- 若字符串用分隔符(如逗号、换行)分隔:
# 替换分隔符为你实际使用的符号(比如"\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) - 若单元格内容本身是列表/数组格式:
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
相关产品推荐
相关产品推荐

