我有这个烧瓶API,在这个API中,用户可以用他们输入的名称执行get请求。问题是,我希望能够在两个不同的列中搜索该名称,但我不知道如何做到这一点,因为这是不起作用的,因为烧瓶说‘不能用多维键索引’:
data = self.data.loc[self.data[['name-english','name_greek']] == name_cap].to_dict()这就是我要说的部分:
class Search(Resource):
def __init__(self):
self.data = pd.read_csv('datacsv')
def get(self, name):
name_cap = name.capitalize()
data = self.data.loc[self.data['name-english'] == name_cap].to_dict()
# return data found in csv
return jsonify({'message': data})所以我想在这两列中搜索,而不是只搜索一列。
发布于 2021-12-10 21:07:12
似乎您在pandasDataframe语法上有问题,而不是在烧瓶本身。你可能是从熊猫那里得到这个错误的:
ValueError:不能使用多维键进行索引
据熊猫文档报道
.loc[]主要是基于标签的,但也可以与布尔数组一起使用。 允许的输入如下:
在您的示例中,您将self.data[['name-english','name_greek']] == name_cap作为loc的一个参数,这将返回另一个数据帧,而不是True和False数组或布尔序列。
若要基于多列筛选数据,可以使用按位运算符(例如,和):
df.loc[(df["A"] == 1) | (df["B"] == 1)]或使用已实现的方法isin()
DataFrame中的每个元素是否包含在值中。 返回:布尔值的DataFrame DataFrame,显示DataFrame中的每个元素是否包含在值中。
与any()并排
返回是否有任何元素是True,可能在一个轴上。 返回:如果指定了DataFrame或DataFrame,则返回DataFrame;否则返回Series。
这样,您就可以将布尔级数作为参数传递给.loc,例如:
df.loc[ df.isin([1]).any(1)]另外,一些经常帮助我处理数据格式的东西是使用jupyter来测试一些东西--首先,我认为它更快,你可以在dataframe中花更多的时间来发现新的方法来做你需要的事情。
https://stackoverflow.com/questions/70309746
复制相似问题