Python将数组转换为列表导出Excel时如何去除方括号和引号
问题核心原因
导出Excel带括号和引号的本质是存入DataFrame的每个单元格内容为单元素嵌套列表,而非纯字符串,pandas导出时会将列表直接转为字符串格式,自然会附带[]和''符号。
解决方案
方案1:生成列表时直接打平(推荐)
修改生成c的逻辑,从源头避免生成嵌套列表:
def top_rank(result, md_adj, miRNAs, diseases): row, col = result.shape rows_list = [] for i in range(3): pidx = np.argsort(-result[:, i]) sidx = np.argwhere(md_adj[:, i] == 1) indices = np.argwhere(np.isin(pidx, sidx)) index = np.delete(pidx, indices) a = diseases[i] # miRNA结果压平为一维数组后转列表,和疾病名拼接为一维平列表 b = miRNAs[index].flatten().tolist() c = [a] + b rows_list.append(c) df = pd.DataFrame(rows_list) df = df.T # 可加index=False参数去掉导出的默认行号,不需要可删除 df.to_excel('test.xlsx', index=False)
方案2:生成DataFrame后统一处理
如果不想修改原有业务逻辑,可以在导出前批量处理所有单元格的嵌套列表:
def top_rank(result, md_adj, miRNAs, diseases): row, col = result.shape rows_list = [] for i in range(3): pidx = np.argsort(-result[:, i]) sidx = np.argwhere(md_adj[:, i] == 1) indices = np.argwhere(np.isin(pidx, sidx)) index = np.delete(pidx, indices) a = diseases[i] b = miRNAs[index] c = np.vstack([a,b]).tolist() rows_list.append(c) df = pd.DataFrame(rows_list) df = df.T # 遍历所有单元格,提取单元素列表内的实际值 df = df.applymap(lambda x: x[0] if isinstance(x, list) and len(x) == 1 else x) df.to_excel('test.xlsx')
两种方案都可以将[['a'], ['b'], ['c']]格式的嵌套列表转为['a','b','c']的平列表,导出Excel后不会再出现多余符号。
内容的提问来源于stack exchange,提问作者moonriver
相关产品推荐
相关产品推荐

