AttributeError: 'NoneType' object has no attribute 'iterrows'
AttributeError: 'NoneType' object has no attribute 'iterrows'
我正在尝试在 rasa 中构建一个聊天机器人。但是我的 class ActionSearchRestaurants 抛出了这个错误:
对于索引,resrnt.iterrows() 中的行:
AttributeError: 'NoneType' 对象没有属性 'iterrows'
这是我正在使用的 class ActionSearchRestaurants。
class ActionSearchRestaurants(Action):
def name(self):
return 'action_restaurant'
def run(self, dispatcher, tracker, domain):
config={ "user_key":"16cde****e0a12d10a7bc8bff6568031"}
zomato = zomatopy.initialize_app(config)
loc = tracker.get_slot('location')
cuisine = tracker.get_slot('cuisine')
location_detail=zomato.get_location(loc, 1)
cols = ['restaurant_name', 'restaurant_address', 'avg_budget_for_two', 'zomato_rating']
resrnt = pd.DataFrame(columns = cols)
d1 = json.loads(location_detail)
lat=d1["location_suggestions"][0]["latitude"]
lon=d1["location_suggestions"][0]["longitude"]
cuisines_dict={'bakery':5,'chinese':25,'cafe':30,'italian':55,'biryani':7,'north indian':50,'south indian':85}
results=zomato.restaurant_search("", lat, lon, str(cuisines_dict.get(cuisine)), 10)
d = json.loads(results)
response=""
if d['results_found'] == 0:
response= "no results"
else:
for restaurant in d['restaurants']:
curr_res = {'zomato_rating':restaurant['restaurant']["user_rating"]["aggregate_rating"],'restaurant_name':restaurant['restaurant']['name'],'restaurant_address': restaurant['restaurant']['location']['address'], 'avg_budget_for_two': restaurant['restaurant']['average_cost_for_two']}
resrnt = resrnt.append(curr_res, ignore_index=True)
resrnt=resrnt.sort_values(by=['zomato_rating'], ascending=False, inplace=True)
for index, row in resrnt.iterrows():
response = response+ index + ". Found \""+ row['restaurant_name']+ "\" in "+ row['restaurant_address']+" has been rated "+ row['zomato_rating']+"\n"
dispatcher.utter_message("-----"+ response)
return [SlotSet('location',loc)]
这一行:
resrnt=resrnt.sort_values(by=['zomato_rating'], ascending=False, inplace=True)
来自 documentation for Dataframe.sort_values:
Returns: sorted_obj : DataFrame or None
DataFrame with sorted values if inplace=False, None otherwise.
从inplace=True
开始,DataFrame被替换为None
,当然没有.iterrows
.
要么使用 inplace=False
(或省略它),要么不重新分配。 (使用 inplace=True
的一个具体原因是不需要重新分配。)
我正在尝试在 rasa 中构建一个聊天机器人。但是我的 class ActionSearchRestaurants 抛出了这个错误:
对于索引,resrnt.iterrows() 中的行: AttributeError: 'NoneType' 对象没有属性 'iterrows'
这是我正在使用的 class ActionSearchRestaurants。
class ActionSearchRestaurants(Action):
def name(self):
return 'action_restaurant'
def run(self, dispatcher, tracker, domain):
config={ "user_key":"16cde****e0a12d10a7bc8bff6568031"}
zomato = zomatopy.initialize_app(config)
loc = tracker.get_slot('location')
cuisine = tracker.get_slot('cuisine')
location_detail=zomato.get_location(loc, 1)
cols = ['restaurant_name', 'restaurant_address', 'avg_budget_for_two', 'zomato_rating']
resrnt = pd.DataFrame(columns = cols)
d1 = json.loads(location_detail)
lat=d1["location_suggestions"][0]["latitude"]
lon=d1["location_suggestions"][0]["longitude"]
cuisines_dict={'bakery':5,'chinese':25,'cafe':30,'italian':55,'biryani':7,'north indian':50,'south indian':85}
results=zomato.restaurant_search("", lat, lon, str(cuisines_dict.get(cuisine)), 10)
d = json.loads(results)
response=""
if d['results_found'] == 0:
response= "no results"
else:
for restaurant in d['restaurants']:
curr_res = {'zomato_rating':restaurant['restaurant']["user_rating"]["aggregate_rating"],'restaurant_name':restaurant['restaurant']['name'],'restaurant_address': restaurant['restaurant']['location']['address'], 'avg_budget_for_two': restaurant['restaurant']['average_cost_for_two']}
resrnt = resrnt.append(curr_res, ignore_index=True)
resrnt=resrnt.sort_values(by=['zomato_rating'], ascending=False, inplace=True)
for index, row in resrnt.iterrows():
response = response+ index + ". Found \""+ row['restaurant_name']+ "\" in "+ row['restaurant_address']+" has been rated "+ row['zomato_rating']+"\n"
dispatcher.utter_message("-----"+ response)
return [SlotSet('location',loc)]
这一行:
resrnt=resrnt.sort_values(by=['zomato_rating'], ascending=False, inplace=True)
来自 documentation for Dataframe.sort_values:
Returns: sorted_obj : DataFrame or None
DataFrame with sorted values if inplace=False, None otherwise.
从inplace=True
开始,DataFrame被替换为None
,当然没有.iterrows
.
要么使用 inplace=False
(或省略它),要么不重新分配。 (使用 inplace=True
的一个具体原因是不需要重新分配。)