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

向Pandas DataFrame添加一维列时数值被强制转为零的问题

Pandas赋值NumPy生成列时1被强制转为0的问题解决

问题重现

在Google Colab中操作时,向Pandas DataFrame添加由NumPy生成的一维列,标记为肿瘤样本的1被强制转为0。尝试两种赋值方式均未得到预期结果:

方式1:先转DataFrame再赋值

# set the targets: normal=0, tumor=1
y_normal = np.zeros(6485)
y_tumor = np.ones(1348)
combined_targets = np.concatenate([y_normal,y_tumor],axis=0)

combined_targets = pd.DataFrame(combined_targets)
combined_targets.columns = ["target"]

final_train_df = combined_df
final_train_df["target"]= combined_targets

final_train_df['target'].value_counts()

方式2:直接赋值NumPy数组

final_train_df['target'] = np.concatenate([y_normal,y_tumor],axis=0)

可能原因及解决办法

  • 数据类型不匹配
    NumPy的zeros()和ones()默认生成float64类型数组,如果final_train_df已有列的 dtype 为整数类型(如int8/int32),赋值时可能因隐式类型转换出现异常。

解决:创建数组时显式指定整数 dtype,或赋值时强制转换:

# 方法1:创建整数类型数组
y_normal = np.zeros(6485, dtype=int)
y_tumor = np.ones(1348, dtype=int)
combined_targets = np.concatenate([y_normal, y_tumor], axis=0)
final_train_df['target'] = combined_targets

# 方法2:赋值时转换类型
final_train_df['target'] = np.concatenate([y_normal, y_tumor], axis=0).astype(int)
  • 索引对齐问题
    如果combined_df的索引不是连续的默认整数索引,赋值时会按索引对齐,导致原本的1值无法匹配到对应行,被填充为0。

解决:重置combined_df的索引后再赋值:

final_train_df = combined_df.reset_index(drop=True)
final_train_df['target'] = np.concatenate([y_normal, y_tumor], axis=0)
  • 长度不匹配
    确认combined_df的行数与combined_targets的长度一致(应为6485+1348=7833),如果行数不匹配,赋值时会出现缺失值填充问题。

验证代码:

print(f"DataFrame行数:{combined_df.shape[0]}")
print(f"目标数组长度:{len(combined_targets)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 21:36:03