如何在Pandas DataFrame中仅对整数区域执行log2归一化且保留字符串标签
报错原因
你直接对整个DataFrame调用np.log2()时,方法会遍历所有单元格,遇到字符串类型的值无法执行数值计算,就会触发该属性错误。
可行实现代码
方案1:固定保留第一列(适配你要保留第一列、第一行标签的需求)
该方案默认第一行是Excel表头(pd.read_excel默认会把第一行识别为列名,不会参与计算,天然保留),仅跳过第一列的标签内容,对剩余区域的数值做log2转换:
import pandas as pd import numpy as np # 读取Excel文件 data1 = pd.read_excel("#此处替换为你的Excel文件实际路径") # 取出第一列标签 first_col = data1.iloc[:, 0] # 对除第一列外的所有列,仅数值类型执行log2转换,非数值内容保持原样 processed_data = data1.iloc[:, 1:].apply(lambda col: np.log2(col) if np.issubdtype(col.dtype, np.number) else col) # 拼接回第一列标签,得到完整结果 data2 = pd.concat([first_col, processed_data], axis=1) # 可选:如果数据存在0值,避免生成-inf,可将上面的np.log2(col)改为np.log2(col + 1) # 导出结果到Excel data2.to_excel("log2转换结果.xlsx", index=False)
方案2:自动识别数值列转换(更灵活)
不需要手动指定要保留的列,自动筛选所有数值类型的列执行转换,字符串列全部保留原样:
import pandas as pd import numpy as np data1 = pd.read_excel("#此处替换为你的Excel文件实际路径") # 筛选所有数值列 numeric_cols = data1.select_dtypes(include=[np.number]).columns # 仅对数值列做log2转换 data1[numeric_cols] = data1[numeric_cols].apply(lambda col: np.log2(col)) data2 = data1.copy() data2.to_excel("log2转换结果.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Shritej Shirsath
相关产品推荐
相关产品推荐

