在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
相关产品推荐
相关产品推荐

