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

如何仅对Pandas DataFrame的单列使用where方法

问题分析与解决

错误原因

你之前的代码错误地对整个DataFrame调用where方法并指定axis=1,导致当ID>5不成立时,整行数据被替换为日期值,最终NAME、ID等非日期列也被修改为日期类型,完全偏离了仅修改Result Date列的需求。

正确实现方式

针对仅修改Result Date列的需求,有以下几种简洁的实现方法:

方法一:对单个列使用where

where方法的逻辑是:条件为True时保留原列值,False时使用替换值。直接对Result Date列调用该方法即可:

import pandas as pd

my_dict={'NAME':['Ravi','Raju','Alex','Ron','King','Jack'],
         'ID':[1,2,3,4,5,6],
         'MATH':[80,40,70,70,82,30],
         'ENGLISH':[81,70,40,50,60,30],
         'Result Date': ['2021-08-01', '2021-04-24', '2021-09-30', '2021-07-13', '2021-09-30', '2021-07-13'],
}
my_data = pd.DataFrame(data=my_dict)
my_data['Result Date'] = pd.to_datetime(my_data['Result Date'])

# 仅对Result Date列执行where操作
my_data['Result Date'] = my_data['Result Date'].where(my_data["ID"] > 5, my_data['Result Date'] + pd.Timedelta(days=14))
print(my_data)

方法二:使用numpy.where

通过numpy.where可以更直观地实现条件赋值:

import pandas as pd
import numpy as np

# ... 前面的DataFrame初始化代码不变

my_data['Result Date'] = np.where(
    my_data["ID"] > 5,  # 判断条件
    my_data['Result Date'],  # 条件为True时的值
    my_data['Result Date'] + pd.Timedelta(days=14)  # 条件为False时的值
)

方法三:用loc直接赋值(最直观)

通过loc定位到需要修改的行和列,直接进行增量赋值:

import pandas as pd

# ... 前面的DataFrame初始化代码不变

# 对ID<=5的行,给Result Date加14天
my_data.loc[my_data["ID"] <= 5, 'Result Date'] += pd.Timedelta(days=14)

执行结果

以上三种方法都会得到你想要的预期结果:

  • ID≤5的行,Result Date都增加了14天
  • ID=6的行(Jack),Result Date保持原日期2021-07-13不变
  • 其他列(NAME、ID、MATH、ENGLISH)的数据完全不受影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:57:41