You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas1.0.5使用.loc按条件给多列赋值报KeyError如何解决

错误原因

  • 第一个KeyError:你使用的pandas 1.0.5版本中,loc不支持同时做行过滤、给不存在的多列直接赋值,col_1和col_2还没有被创建,所以定位列的时候抛出找不到列的错误。
  • 第二个TypeError:去掉loc之后的df[布尔序列, 列名列表]写法本身不合法,df[]默认只能接受单维度的索引参数,你传入的元组会被尝试作为哈希键查找,而布尔Series是可变对象无法被哈希,因此报错。

解决方案

方法1:兼容你原有逻辑的写法

先提前创建两个空列,再用loc按条件赋值:

import pandas as pd
import numpy as np

test = {'Price': ['Free','free', '-16.66', 'Name', '']}
df = pd.DataFrame(test)
# 先创建新列,初始值设为NaN
df[['col_1', 'col_2']] = np.nan
# 再按条件赋值
mask = df['Price'].astype(str).str.contains(':')
df.loc[mask, ['col_1', 'col_2']] = df['Price'].astype(str).str.split(':', n=1, expand=True)

方法2:更简洁的写法,无需提前过滤

str.split加expand=True会自动把不包含冒号的行的第二列填充为NaN,完全符合你的需求,不需要额外加loc过滤:

import pandas as pd

test = {'Price': ['Free','free', '-16.66', 'Name', '']}
df = pd.DataFrame(test)
df[['col_1', 'col_2']] = df['Price'].astype(str).str.split(':', n=1, expand=True)

内容的提问来源于stack exchange,提问作者Azima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:24:10