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

在Pandas中基于两列比较修改列值时遇TypeError问题求助

解决Pandas中日期比较赋值的TypeError问题

首先,你的代码存在两个核心问题:

  • 错误的DataFrame索引语法:Pandas不支持df[条件, '列名']这种直接用逗号分隔行筛选和列选择的写法,需要用.loc来实现行+列的精准定位
  • 日期列是字符串类型,直接做大小比较会得到不符合实际日期逻辑的结果(比如字符串'02/2013'会被判定为比'11/2012'大,因为字符串比较是按字符顺序逐位对比的)

下面是完整的解决步骤:

1. 将字符串日期转换为datetime类型

先把Date和Study_Date列转为Pandas的datetime对象,这样才能正确比较日期的先后顺序:

import pandas as pd

# 转换日期列,指定格式为"月/年"
df['Date'] = pd.to_datetime(df['Date'], format='%m/%Y')
df['Study_Date'] = pd.to_datetime(df['Study_Date'], format='%m/%Y')

2. 使用.loc完成赋值操作

用Pandas推荐的.loc[行条件, 列名]语法,筛选出符合条件的行并修改Score值:

# 将Date早于Study_Date的行的Score设为0
df.loc[df['Date'] < df['Study_Date'], 'Score'] = 0

可选:用numpy.where实现更简洁的赋值

如果你喜欢更紧凑的写法,也可以用numpy.where直接生成新的Score列:

import numpy as np

df['Score'] = np.where(df['Date'] < df['Study_Date'], 0, df['Score'])

执行完上述代码后,所有Date早于Study_Date的行(比如02/2011到03/2012区间的记录)的Score都会被替换为0,而11/2012及之后的行将保留原分数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:10:58