【问题标题】:Convert Object type to Float type将 Object 类型转换为 Float 类型
【发布时间】:2019-06-22 02:07:14
【问题描述】:

这个目标是从 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

我希望有人可以帮助我解决这个问题。 谢谢你:)

【问题讨论】:

  • 嗨,我认为你应该这样做 model['protocol_type'].astype(float) 注意方括号 [] 而不是 ()
  • 感谢您回答我的问题,我已经尝试过您的想法,但我收到了这个错误:ValueError: could not convert string to float: tcp

标签: python python-3.x pandas numpy jupyter-notebook


【解决方案1】:

首先,正如@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

【讨论】:

  • 感谢您帮助我,但我不明白“这可能是多余的”。你能解释一下这些句子是什么意思吗?。
  • @DavidReynaldo 因为没有它,该列的dtype 已经是int。不确定您的下一步是什么,但除非涉及严格的type 检查程序,否则int 应该可以。
  • 谢谢,它有效。但是当我看到信息时,类型仍然是“对象”,例如这个协议类型 494020 非空对象。你能再帮我一次吗,拜托。谢谢
  • 你把它分配回原来的df了吗?操作不到位
  • @DavidReynaldo 在执行model['protocol_type'] = model['protocol_type'].astype('category').cat.codes 之后,我在执行model['protocol_type'].dtype 时得到dtype('int8')。可以试试吗?
猜你喜欢
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多