繁体   English   中英

KeyError:熊猫数据框中的错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM