如何将列表的列表拆分为单独列?解决AttributeError报错问题
问题与解决方案
问题描述
需要将嵌套列表拆分为ID、Form、Lemma等10个属性列,用于对比依存句法分析的预测文件与黄金标注文件,但执行以下代码时触发报错:
sep_lines = file_pred[0].str.split(" ", n=10, expand=True) lines["ID"] = sep_lines[0]
报错信息:
AttributeError: 'list' object has no attribute 'str'
错误原因
file_pred[0]是Python原生列表对象,而.str是pandas库为Series/DataFrame类型提供的字符串处理专属属性,原生列表没有这个方法,因此触发属性不存在的错误。
解决方案
根据数据结构的不同,提供两种可行方案:
方案1:先转成pandas Series再拆分
如果file_pred是由每行文本字符串组成的列表(如["1 hello Hello ...", "2 world World ..."]),先将其转换为pandas Series,再使用.str.split:
import pandas as pd # 将列表转为pandas Series pred_series = pd.Series(file_pred) # 按空格拆分,最多拆分为10列 sep_lines = pred_series.str.split(" ", n=10, expand=True) # 为拆分后的列命名(对应依存句法标注的10个属性) sep_lines.columns = ["ID", "Form", "Lemma", "UPOS", "XPOS", "Feats", "Head", "DepRel", "Deps", "Misc"] # 将拆分结果合并到目标DataFrame lines中 lines = pd.concat([lines, sep_lines], axis=1)
方案2:用原生Python拆分后转DataFrame
如果更倾向于用原生Python处理列表,先对每个元素做拆分,再转换为DataFrame:
import pandas as pd # 遍历列表,对每行字符串按空格拆分(最多拆10次) split_rows = [line.split(" ", maxsplit=10) for line in file_pred] # 将拆分后的二维列表转为DataFrame并指定列名 sep_lines = pd.DataFrame(split_rows, columns=["ID", "Form", "Lemma", "UPOS", "XPOS", "Feats", "Head", "DepRel", "Deps", "Misc"]) # 合并到目标DataFrame lines = pd.concat([lines, sep_lines], axis=1)
内容的提问来源于stack exchange,提问作者karak87rt0
相关产品推荐
相关产品推荐

