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

pandas dataframe野外粒径数据处理:混合类型转换与离散分类问题

混合类型粒径数据处理解决方案

报错核心原因

  • 误用Python内置关键字dict作为变量名,会引发不可预期的类型错误
  • 手动嵌套循环判断type(item)==str无法兼容pandas/numpy的数值类型(如np.int64/np.float64)
  • 逐列处理时重复执行全表replace操作,导致列类型频繁变化触发异常

优化实现代码

首先需要提前定义好离散分类的分箱参数,示例用Wentworth粒度分级的分箱供参考,可根据实际需求调整:

import pandas as pd
import numpy as np

# 提前定义粒径分箱参数
size_class = [0, 0.01, 0.5, 2, 4, 8, 16, 32, 64, 128, 256, 512, np.inf]
label = [0.01, 0.5, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

# 读取Excel,避免用内置关键字做变量名
sheet_dict = pd.read_excel('/media/path', sheet_name=None)

# 遍历所有工作表
for sheet_name, df in sheet_dict.items():
    # ---------------- 需求1:计算不可测量项占比 ----------------
    # 全表转字符串后统计所有值的出现频率,完全规避混合类型判断问题
    all_values = df.applymap(str).stack()
    total_count = len(all_values)
    B_ratio = (all_values == 'B').sum() / total_count
    D_ratio = (all_values == 'D').sum() / total_count
    # 可根据需求打印或存储占比结果
    print(f"工作表{sheet_name}的基岩(B)占比:{B_ratio:.2%},碎屑(D)占比:{D_ratio:.2%}")

    # ---------------- 需求2:替换指定标识为数值 ----------------
    replace_map = {
        'S': 0.5,
        'L': 0.01,
        'C': 0.01,
        # 不可测量项转NaN避免影响后续数值计算
        'B': np.nan,
        'D': np.nan
    }
    df = df.replace(replace_map)

    # ---------------- 需求3:大粒径离散分类 ----------------
    for col in df.columns:
        # 转数值,非数值自动转NaN
        df[col] = pd.to_numeric(df[col], errors='coerce')
        # 离散分箱,right=True表示右闭区间,220会自动落入128-256区间对应标签256
        df[col] = pd.cut(df[col], bins=size_class, labels=label, right=True)
    
    # 处理后的df存回原字典,可后续导出
    sheet_dict[sheet_name] = df

# 示例:将所有处理后的表导出为新Excel
with pd.ExcelWriter('/media/processed_result.xlsx') as writer:
    for sheet_name, df in sheet_dict.items():
        df.to_excel(writer, sheet_name=sheet_name, index=False)

关键优化点

  • 用applymap(str)统一将全表转为字符串做统计,彻底解决混合类型判断报错问题
  • 全表一次性执行替换操作,不需要逐列处理,性能和稳定性更高
  • 所有非数值类的不可测量项统一转NaN,不会影响后续数值计算和分箱操作
  • 分箱逻辑自动匹配区间归并规则,符合你要求的220归入256分类档的需求

内容的提问来源于stack exchange,提问作者Mac McMahan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:27:00