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

如何将Python Pandas DataFrame中的字母数字值转换为数值?

问题背景

以下是我的CAN总线数据DataFrame内容:

TimestampCAN IDByteDATA[0]DATA[1]DATA[2]DATA[3]DATA[4]DATA[5]DATA[6]DATA[7]AttackType
169326000008.00000000000000000DoS Attack
73257400008.00000000000000000DoS Attack
60250302c08.01400000000000000Normal Message
6552504308.00000000000000000Normal Message
165929204408.0ff000000ffd20800Normal Message
4608300028.000000000000601a2Normal Message
38632403298.00cbc7f1411200014Normal Message
62575101308.0118000ff0e800be7Normal Message
164748200028.0000000000003092bNormal Message
140344200008.00000000000000000DoS Attack

我的DataFrame中多数值为字母数字类型(比如02c0、ff这类十六进制字符串),请问如何将这些值中的字母转换为数值?我曾尝试将字母数字值转为NaN后删除行,但因几乎每行都包含此类值,该方法无效,恳请协助。

解决方案

1. 转换十六进制字符串为十进制数值

你的数据里CAN ID、DATA[0]到DATA[7]都是十六进制格式的字符串,直接用Python的int()函数指定base=16就能转成十进制数值,结合pandas的apply批量处理:

import pandas as pd

# 假设你的DataFrame名为df
hex_columns = ['CAN ID', 'DATA[0]', 'DATA[1]', 'DATA[2]', 'DATA[3]', 'DATA[4]', 'DATA[5]', 'DATA[6]', 'DATA[7]']

for col in hex_columns:
    df[col] = df[col].apply(lambda x: int(x, 16))

如果担心有非法的十六进制值,可以加异常处理避免报错:

def hex_to_dec(x):
    try:
        return int(x, 16)
    except ValueError:
        return x  # 保留原始值,或返回NaN等自定义值

for col in hex_columns:
    df[col] = df[col].apply(hex_to_dec)

2. 转换分类列AttackType为数值

如果需要把AttackType也转成数值,用map函数做映射即可:

attack_map = {'Normal Message': 0, 'DoS Attack': 1}
df['AttackType'] = df['AttackType'].map(attack_map)

这样处理后,所有含字母的十六进制字符串都会转为十进制数值,分类列也能转成数字,无需删除任何行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:13:10