如何将整数转为二进制?new_cases列二值化代码失效求助
问题排查与解决
1. 代码逻辑偏差(最可能原因)
你写的Dt[Dt['new_cases'] >= 1 ] = 1是把符合条件的整行所有列都设为1,而非仅修改new_cases列。如果这不是你的预期,或者因链式索引触发SettingWithCopyWarning导致赋值失效,就会出现“没生效”的假象。
正确的目标列赋值写法应该用loc定位,避免链式索引问题:
Dt.loc[Dt['new_cases'] >= 1, 'new_cases'] = 1
2. 数据类型不匹配
如果new_cases列是object类型(比如存了字符串格式的数字),>=1的比较逻辑会直接失效。先检查数据类型:
print(Dt['new_cases'].dtype)
若为object,先转换为数值类型:
Dt['new_cases'] = pd.to_numeric(Dt['new_cases'], errors='coerce')
errors='coerce'会把无法转换的值转为NaN,之后再执行二值化操作。
3. NaN值干扰
new_cases列的NaN值与任何数值比较结果都是False,这类行不会被修改。如果需要处理NaN,可先填充:
Dt['new_cases'] = Dt['new_cases'].fillna(0)
再执行二值化逻辑。
4. 视图/副本问题
如果Dt是从其他DataFrame切片生成的(比如Dt = original_df[cols]),可能只是原数据的视图而非独立副本,直接赋值不会同步到原数据。可以通过内部属性排查:
print(Dt._is_view)
若返回True,先创建独立副本再操作:
Dt = original_df[cols].copy()
内容的提问来源于stack exchange,提问作者aditya murti
相关产品推荐
相关产品推荐

