如何将含浮点数与对象的DataFrame转为保留表头的二进制DataFrame
解决方案
核心需求是将数值列中大于0的值转为1,0保持为0,同时保留Name列的字符串内容,以下是可行的实现方式:
方法1:Name未设为索引时
# 筛选出所有数值列(排除Name列) numeric_columns = df.columns.drop("Name") # 将数值列中大于0的值转为1,0保持0 df[numeric_columns] = df[numeric_columns].gt(0).astype(int)
方法2:Name已设为索引时
# 直接对所有数值列进行转换 df[:] = df.gt(0).astype(int)
之前尝试失败的原因
df.astype(int):浮点数转整数是截断取整,0.9这类小于1的正数会被直接转为0,不符合需求。df.apply(pd.to_numeric, errors='coerce'):对整个DataFrame执行时,Name列的字符串会被强制转为NaN,必须只针对数值列使用该方法。df.where(df <= 0.4, 1):未排除Name列时,字符串与浮点数的比较会触发类型错误;即便设为索引,若数据类型存在混合(比如数值列混入字符串)也会报错,而gt(0)的方式更稳妥,自动适配数值类型的判断。
内容的提问来源于stack exchange,提问作者Mimikyu o_0
相关产品推荐
相关产品推荐

