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

