[英]KeyError: False in pandas dataframe
import pandas as pd
businesses = pd.read_json(businesses_filepath, lines=True, encoding='utf_8')
restaurantes = businesses['Restaurants' in businesses['categories']]
我想删除类别列中没有餐厅的行,该列有列表,但是给出了错误“KeyError: False”,我想了解原因以及如何解决。
'Restaurants' in businesses['categories']
的表达式'Restaurants' in businesses['categories']
返回布尔值False
。 这被传递给不包含名为 False 的列的 DataFrame 业务的括号索引运算符,因此引发 KeyError。
您要做的是称为布尔索引的东西,它的工作原理是这样的。
businesses[businesses['categories'] == 'Restaurants']
如果您发现您的数据包含拼写变体或替代餐厅相关术语,以下内容可能会有所帮助。 本质上,您将与餐厅相关的术语放在restuarant_lst
。 如果restaurant_lst
中的任何项目包含在业务系列的每一行中,则lambda
函数将返回true
。 .loc
索引器过滤掉为lambda
函数返回false
行。
restaurant_lst = ['Restaurant','restaurantes','diner','bistro']
restaurant = businesses.loc[businesses.apply(lambda x: any(restaurant_str in x for restaurant_str in restaurant_lst))]
这样做的原因是Series
类实现了一个自定义in
运算符,它不像==
那样返回iterable
,这是一个解决方法
businesses[['Restaurants' in c for c in list(businesses['categories'])]]
希望这可以帮助您在列中查找子字符串而不是完全匹配的人。
我想你的意思是:
businesses = businesses.loc[businesses['categories'] == 'Restaurants']
只会保留类别餐厅的行
这里没有一个答案对我有用,
businesses[businesses['categories'] == 'Restaurants']
显然不会起作用,因为“类别”中的值不是字符串,而是列表,这意味着比较总是会失败。
这是什么,但是,工作中,被列转换成元组,而不是字符串:
businesses['categories'] = businesses['categories'].apply(tuple)
这允许您使用标准的 .loc 东西:
businesses.loc[businesses['categories'] == ('Restaurants',)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.