如何移除pandas DataFrame输出索引与list(zip)生成的多余括号
代码修改方案
import pandas as pd import numpy as np import json df = pd.read_csv("file") def get_lengths(s): cols = s.index[::2] labels = s.index[::2] # 计算字段长度时额外计入拼接用的空格(仅非末尾字段需要加1位空格) str_list = list(s[cols]) len_list = [len(s) + 1 for s in str_list[:-1]] + [len(str_list[-1])] l = list(np.cumsum(len_list)) l = list(zip([0] + l[:-1], l)) # 直接生成扁平化三元组,消除嵌套结构 entities = [[start, end, label] for (start, end), label in zip(l, labels)] return (' '.join(str_list), {'entities': entities}) data_fr = df.apply(get_lengths, axis=1) # 转成普通列表后再写入文件,移除顶层行索引 with open("file", "w", encoding="utf-8") as f: json.dump(list(data_fr), f, ensure_ascii=False)
修改说明
- 扁平化entities结构:原代码
list(zip(l, labels))会生成((起始,结束),标签)的嵌套结构,修改为列表推导式直接生成[起始,结束,标签]的三元组,符合格式要求 - 修正偏移计算:原代码未计入字段拼接时插入的空格长度,调整长度计算逻辑,为非末尾字段的长度加1,和你给出的预期偏移对齐
- 移除顶层数字索引:原代码直接调用Series的
to_json()方法会自动把行索引作为顶层字典的键,修改为先把处理后的Series转为普通列表,再用json.dump写入文件,输出就是无索引的数组格式
内容的提问来源于stack exchange,提问作者bellatrix
相关产品推荐
相关产品推荐

