DataFrame中REGIS_HOUR列计算异常求助:转int后大于12减12不生效
解决DataFrame中REGIS_HOUR列条件计算不生效的问题
以下是几种可靠的实现方式,以及排查问题的关键点:
正确实现方式
方法1:使用numpy.where快速赋值
import numpy as np # 对符合条件的行执行减12,其余保持原值 df['REGIS_HOUR'] = np.where(df['REGIS_HOUR'] > 12, df['REGIS_HOUR'] - 12, df['REGIS_HOUR'])
方法2:用pandas.loc精准修改
# 定位所有REGIS_HOUR>12的行,直接修改对应列的值 df.loc[df['REGIS_HOUR'] > 12, 'REGIS_HOUR'] = df['REGIS_HOUR'] - 12
这种方式能避免SettingWithCopyWarning,确保修改的是原DataFrame的列,而非临时切片副本。
排查不生效的常见原因
- 未赋值回原列:如果只写了
df['REGIS_HOUR'] - 12而没有df['REGIS_HOUR'] = ...,原列不会发生任何变化,必须将计算结果重新赋值给目标列。 - 列类型未真正转为整数:执行
df['REGIS_HOUR'].dtype确认类型是否为int64/int32。如果列中存在空值,astype('int')可能无法完全生效,需先处理空值:df['REGIS_HOUR'] = df['REGIS_HOUR'].fillna(0).astype('int') - 无符合条件的数据:用
df[df['REGIS_HOUR'] > 12]检查是否存在大于12的数值,如果结果为空,计算逻辑自然不会触发。
内容的提问来源于stack exchange,提问作者Chun Seong
相关产品推荐
相关产品推荐

