首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法比较类型'ndarray(dtype=int64)‘和'str’

无法比较类型'ndarray(dtype=int64)‘和'str’
EN

Stack Overflow用户
提问于 2018-11-26 10:15:26
回答 7查看 45.4K关注 0票数 13

我要替换的数据示例

数据具有以下属性

  1. 买v-高,高,医,低
  2. 高,低
  3. 门2、3、4、5-更多
  4. 2,4-更多人
  5. lug_boot小,医学,大
  6. 安全度低,med.high

以下是我所做的

代码语言:javascript
复制
enter code here
#Buying price generalization 
df["Buying_Price"]=df["Buying_Price"].replace({"vhigh":4})
df["Buying_Price"]=df["Buying_Price"].replace({"high":3})
df["Buying_Price"]=df["Buying_Price"].replace({"med":2})
df["Buying_Price"]=df["Buying_Price"].replace({"low":1})

#Maintanace generalization 
df["Maintanance_price"]=df["Maintanance_price"].replace({"vhigh":4}) 
df["Maintanance_price"]=df["Maintanance_price"].replace({"high":3})   
df["Maintanance_price"]=df["Maintanance_price"].replace({"med":2})
df["Maintanance_price"]=df["Maintanance_price"].replace({"low":1})

#lug_boot generalization 
df["Lug_boot"]=df["Lug_boot"].replace({"small":1})
df["Lug_boot"]=df["Lug_boot"].replace({"med":2})
df["Lug_boot"]=df["Lug_boot"].replace({"big":3})

#Safety Generalization 
df["Safety"]=df["Safety"].replace({"low":1})
df["Safety"]=df["Safety"].replace({"med":2})
df["Safety"]=df["Safety"].replace({"big":3})

print(df.head())

印刷时显示:

代码语言:javascript
复制
Cannot compare types 'ndarray(dtype=int64)' and 'str'
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2018-11-26 10:32:54

您传递给用( string )值替换的一些int实际上是int64值的ndarray。本专栏中只有int64( here actually ndarray(dtype=int64))类型数据。请参阅文档pandas.Dataframe.replace()replace()试图查找并将它们与您传递的str值进行比较。

代码语言:javascript
复制
df["Buying_Price"]=df["Buying_Price"].replace({"vhigh":4})

查找所有"vhigh"值,并将其与当前包含的值进行比较,将其替换为4。在比较时,它失败了,因为尝试将str数据与int64 ('ndarray(dtype=int64)')进行比较。

--一个简单的例子来模拟这一点:

代码语言:javascript
复制
import pandas as pd
import numpy as np

a = np.array([1])
df = pd.DataFrame({"Maintanance_price": a})
df["Maintanance_price"] = df["Maintanance_price"].replace({"a":1})

print(df)

Out:

代码语言:javascript
复制
TypeError: Cannot compare types 'ndarray(dtype=int64)' and 'str'
票数 11
EN

Stack Overflow用户

发布于 2020-05-31 16:00:22

我也面临着同样的问题,对我起作用的是将特性的数据类型转换为对象类型。

代码语言:javascript
复制
   train['Some_feature']=train.Some_feature.astype(object)

希望能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2020-06-23 20:43:01

您可以尝试以下代码:

代码语言:javascript
复制
df['Maintanance_price'].replace(to_replace = ['low', 'med','high','vhigh'], value =[1,2,3,4], inplace=True)
df.head()

此外,按照@ouiemboughrra的建议,检查这些值是否已经转换为数字,以防您重新运行单元格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53478932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档