如何将含多词标签的嵌套列表转为指定结构的DataFrame?
解决多词标签拆分错误的DataFrame转换问题
你的问题出在直接用split(" ")会把所有空格都拆分,导致多词标签被拆成多个列,打乱了DataFrame的结构。这里给你两种实用的解决思路:
方法一:从右侧拆分(适用于数值在字符串最后)
如果每个字符串都是「多词标签 + 数值」的固定结构,数值是最后一部分,用rsplit(" ", 1)从右侧只拆一次,就能把前面所有内容保留为完整标签,最后一段单独作为数值:
import pandas as pd # 示例数据 merged = ["Niveaux très haut 10", "Moyen niveau 5", "Bas 3"] # 右侧仅拆分1次,分离标签与数值 processed_data = [item.rsplit(" ", 1) for item in merged] # 转为DataFrame并指定列名 df = pd.DataFrame(processed_data, columns=["分类标签", "数值"]) # 可选:将数值列转为数值类型,方便后续计算 df["数值"] = pd.to_numeric(df["数值"])
运行后会得到结构正确的DataFrame,多词标签完整保留,数值单独成列。
方法二:正则表达式匹配(适配复杂场景)
如果字符串格式更灵活(比如数值不在最后、标签和数值有特殊分隔符),可以用正则表达式精准提取标签和数值:
比如假设标签是任意非数字内容,数值是包含小数的数字:
import pandas as pd import re merged = ["Niveaux très haut 10", "Score moyen: 7.5", "20 points - Bas niveau"] # 定义正则规则:匹配非数字部分(标签)和数字部分(数值) pattern = r"([^\d]+)([\d.]+)" processed_data = [] for item in merged: match = re.search(pattern, item) if match: # 去除标签前后多余空格 label = match.group(1).strip() value = match.group(2) processed_data.append([label, value]) df = pd.DataFrame(processed_data, columns=["分类标签", "数值"]) df["数值"] = pd.to_numeric(df["数值"])
这种方法能应对更多复杂格式,只要能通过正则区分标签和数值即可。
内容的提问来源于stack exchange,提问作者beaumoqueur
相关产品推荐
相关产品推荐

