Pandas端口列object转int失败及Weka属性识别异常问题求助
问题原因
sport和dport列的object类型,是因为数据里同时存在十进制数字字符串和十六进制格式字符串(比如报错里的0x0303),你看到的示例都是十进制,但数据集里隐藏了十六进制格式的端口值,导致无法直接转成int,也让Weka无法识别为数值或标称属性。
解决方案
自定义转换函数,自动识别字符串格式,统一转为十进制整数,替换原列即可:
import pandas as pd def port_str_to_int(port_str): try: # 优先尝试十进制转换 return int(port_str) except ValueError: # 转换失败则按十六进制处理 return int(port_str, 16) # 读取数据 dt = pd.read_csv("port.csv") # 批量转换端口列 dt['sport'] = dt['sport'].apply(port_str_to_int) dt['dport'] = dt['dport'].apply(port_str_to_int) # 验证转换结果 print(dt.dtypes)
可选验证步骤
如果想先定位数据集里的十六进制格式行,用以下代码筛选:
# 筛选sport列中的十六进制行 hex_sport_rows = dt[dt['sport'].str.contains('0x', case=False)] print(hex_sport_rows) # 筛选dport列中的十六进制行 hex_dport_rows = dt[dt['dport'].str.contains('0x', case=False)] print(hex_dport_rows)
转换完成后,sport和dport会转为int类型,K-means等机器学习算法可正常处理,Weka也能识别为数值属性。
内容的提问来源于stack exchange,提问作者LAT
相关产品推荐
相关产品推荐

