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

scipy加载ARFF转pandas DataFrame值为bytes带b前缀如何解决

现象原因

scipy.io.arff.loadarff 对ARFF格式规范中的标称型(nominal)、字符串型字段默认以二进制字节流(bytes类型)读取,不会自动按照文本编码解码为普通字符串,因此输出值会自带b'xxx'的字节类型标识,数值型字段不会出现该问题。

修复方法

方案1:手动批量解码字节列(无需额外安装依赖)

加载数据后遍历所有存储bytes类型的object列,统一做UTF-8解码即可,代码如下:

import pandas as pd
from scipy.io.arff import loadarff 

raw_data = loadarff('/speeddating.arff')
df = pd.DataFrame(raw_data[0])

# 对所有存字节内容的列做文本解码
for col in df.columns:
    if df[col].dtype == 'object':
        df[col] = df[col].str.decode('utf-8')

若解码时出现编码报错,可将utf-8替换为latin-1重试,部分早期生成的ARFF文件可能使用非UTF-8编码。

解码完成后如果部分字段实际应为数值类型,可单独对对应列调用pd.to_numeric(df['列名'], errors='coerce')做类型转换即可。

方案2:使用自动处理类型的ARFF解析库

如果不想手动处理解码逻辑,可以使用liac-arff库加载,该库会自动将字符串类字段解析为普通文本类型:

  • 先在Colab环境中安装依赖:
    !pip install liac-arff
    
  • 加载数据代码:
    import pandas as pd
    import arff
    
    with open('/speeddating.arff', 'r', encoding='utf-8') as f:
        raw = arff.load(f)
    df = pd.DataFrame(raw['data'], columns=[attr[0] for attr in raw['attributes']])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:54:16