python - 将 Object 类型转换为 Float 类型
问题描述
这个目标是从 KDD 99 数据集中将类型从 'object' 转换为 'float'。
这是数据集的信息:
class 'pandas.core.frame.DataFrame'
RangeIndex: 494020 entries, 0 to 494019
Data columns (total 42 columns):
duration 494020 non-null int64
protocol_type 494020 non-null object
service 494020 non-null object
src_bytes 494020 non-null object
dst_bytes 494020 non-null int64
flag 494020 non-null int64
land 494020 non-null int64
wrong_fragment 494020 non-null int64
urgent 494020 non-null int64
hot 494020 non-null int64
num_failed_logins 494020 non-null int64
logged_in 494020 non-null int64
num_compromised 494020 non-null int64
root_shell 494020 non-null int64
su_attempted 494020 non-null int64
num_root 494020 non-null int64
num_file_creations 494020 non-null int64
num_shells 494020 non-null int64
num_access_files 494020 non-null int64
num_outbound_cmds 494020 non-null int64
is_hot_login 494020 non-null int64
is_guest_login 494020 non-null int64
count 494020 non-null int64
serror_rate 494020 non-null int64
rerror_rate 494020 non-null float64
same_srv_rate 494020 non-null float64
diff_srv_rate 494020 non-null float64
srv_count 494020 non-null float64
srv_serror_rate 494020 non-null float64
srv_rerror_rate 494020 non-null float64
srv_diff_host_rate 494020 non-null float64
dst_host_count 494020 non-null int64
dst_host_srv_count 494020 non-null int64
dst_host_same_srv_rate 494020 non-null float64
dst_host_diff_srv_rate 494020 non-null float64
dst_host_same_src_port_rate 494020 non-null float64
dst_host_srv_diff_host_rate 494020 non-null float64
dst_host_serror_rate 494020 non-null float64
dst_host_srv_serror_rate 494020 non-null float64
dst_host_rerror_rate 494020 non-null float64
dst_host_srv_rerror_rate 494020 non-null float64
class 494020 non-null object
dtypes: float64(15), int64(23), object(4)
memory usage: 158.3+ MB
有 4 种对象类型需要转换为 float contains :
1. protocol type : 'tcp' , 'udp' , 'icmp'
2. service : 'http' , 'auth' , 'http_443' , etc
3. src_bytes : 'OTH' 'REJ' , 'SF' , etc
4. class : 'normal' , 'neptune' , 'smurf' , etc
model('protocol_type').astype(float)
但我得到了这个错误:
TypeError: 'DataFrame' object is not callable
我希望有人可以帮助我解决这个问题。谢谢 :)
解决方案
首先,正如@thecruisy 指出的那样,您应该使用括号而不是 (),这会导致:
model['protocol_type'].astype(float)
但是,由于该列位于对象(或str
)中,这将引发ValueError
.
ValueError: could not convert string to float: 'tcp'
你应该做的是对它们进行编码。您可以使用pandas.DataFrame
:
model['protocol_type'].astype('category').cat.codes.astype(float)
# ^^^^^^^^^^^^^^
# This may be redundant, though
或使用sklearn.preprocessing.LabelEncoder
推荐阅读
- javascript - 如何在反应中验证多步表单
- java - 从JAVA中的JSON动态读取和存储具有相同起始名称的字段
- svn - 如何在公司的SVN服务器中查找文件
- javascript - 为 websocket 引入中间件代理时反应热重载中断
- laravel - Laravel 的 updateOrCreate 中的 created_by 和 updated_by
- python - 如何解决 TypeError: sequence item 0: expected str instance, float found?
- html - 未调用 React 中的服务器端渲染
- javascript - 如何在 Gulp 中使用循环和异步/等待?
- linux - 来自文件 fd 的文件系统 fd
- php - 如何从保存为 longblob 文件的 sql 数据库中添加图片作为背景图像属性?