尝试将分词化响应合并到Pandas DataFrame时遇self._engine.get_loc报错求助
解决分词结果合并至DataFrame时的
self._engine.get_loc(casted key)错误 这个错误本质是Pandas无法找到你指定的索引或列名,结合你“反分词后添加至DataFrame”的需求,可按以下步骤排查解决:
一、先完成反分词操作
将分词后的列表转为字符串,这是基础操作,示例代码:
# 场景1:DataFrame已有分词列(如'tokenized_content') df['untokenized_content'] = df['tokenized_content'].apply(lambda x: ' '.join(x)) # 场景2:分词结果是外部列表(如tokenized_responses) untokenized_list = [' '.join(tokens) for tokens in tokenized_responses]
二、排查错误核心原因及解决
- 原因1:索引长度不匹配
如果外部分词结果的长度和DataFrame的行数不一致,赋值时会触发索引匹配错误。
解决:
先检查长度是否一致:
print(len(untokenized_list) == len(df)) # 需返回True
若不一致,需确认分词结果是否遗漏或多生成了数据,调整后再赋值。
- 原因2:列名拼写错误或误用不存在的列
如果你是修改已有列而非新增列,列名拼写错误会触发“找不到键”的错误。
解决:
- 新增列时直接使用合法列名即可(Pandas会自动创建)
- 修改已有列时,先通过
df.columns确认列名准确,示例:
print(df.columns) # 查看所有列名,确保拼写完全一致 df['untokenized_content'] = untokenized_list # 与列名严格匹配
- 原因3:索引标签不匹配
若你使用loc按索引标签赋值,但标签不存在于DataFrame中,也会触发该错误。
解决:
确保赋值用的索引标签在df的索引中存在,示例:
# 错误示例:索引100不存在 # df.loc[100, 'untokenized_content'] = 'xxx' # 正确做法:使用现有索引或重置索引 df = df.reset_index(drop=True) # 重置为连续整数索引 df.loc[:, 'untokenized_content'] = untokenized_list # 全量赋值
三、完整正确示例
import pandas as pd # 模拟数据 df = pd.DataFrame({'tokenized_content': [['我', '正', '尝试'], ['合', '并', '分词']]}) # 反分词并添加至DataFrame df['untokenized_content'] = df['tokenized_content'].apply(lambda x: ' '.join(x)) print(df)
输出:
tokenized_content untokenized_content 0 [我, 正, 尝试] 我 正 尝试 1 [合, 并, 分词] 合 并 分词
内容的提问来源于stack exchange,提问作者David Dare
相关产品推荐
相关产品推荐

