Python 使用Flask作为API过滤字典
我已将数据帧转换为字典,以便通过flask实现API。我正在努力将列名附加到字典中的每个索引,因此无法运行代码:Python 使用Flask作为API过滤字典,python,pandas,dictionary,Python,Pandas,Dictionary,我已将数据帧转换为字典,以便通过flask实现API。我正在努力将列名附加到字典中的每个索引,因此无法运行代码: @app.route('/api/v1/resources/names', methods=['GET']) def api_name(): if 'name' in request.args: name = str(request.args['name']) else: return "Error: No name was
@app.route('/api/v1/resources/names', methods=['GET'])
def api_name():
if 'name' in request.args:
name = str(request.args['name'])
else:
return "Error: No name was provided, Please specify a first and last name"
results = []
for index['Name] in main_data:
if (index == name):
results.append(index)
results = str(results)
return jsonify(results)
当我尝试调用API时
http://127.0.0.1:5000/api/v1/resources/names?name=John%20Doe
TypeError: string indices must be integers
我想这是因为我的字典没有任何列标题,我希望将字典从
{
"John Doe": {
"2020-09-01": "4:00PM",
"2020-09-03": "8:00AM",
"2020-09-04": "2:00PM",
"2020-09-14": "8:00AM",
"2020-09-16": "6:00PM",
"2020-09-22": "5:00PM",
"2020-09-23": "2:00PM",
"2020-09-25": "1:00PM",
"2020-09-30": "5:00PM",
"2020-10-01": "8:00PM",
"2020-10-05": "5:00PM",
"2020-10-08": "1:00PM",
"2020-10-09": "5:00PM",
"2020-10-10": "4:00PM",
"2020-10-12": "5:00PM",
"2020-10-14": "7:00PM"
},
"Firstname Lastname": {
"2020-08-20": "11:00AM",
"2020-08-21": "10:00AM",
"2020-08-22": "10:00AM",
"2020-08-23": "11:00AM",
"2020-08-24": "10:00AM",
"2020-08-25": "11:00AM",
"2020-08-26": "2:00PM",
"2020-08-27": "4:00PM",
"2020-08-28": "2:00PM",
"2020-08-29": "1:00PM"
}
}
致:
我在pandas中使用的最初将数据帧转换为字典的代码如下所示
def buildDictionary():
main_data = pd.read_csv('output.csv', delimiter=",", encoding='cp1252')
nameDictionary = (main_data.groupby('Name')
.apply(lambda x: dict(zip(x['Date'],x['Time'])))
.to_dict())
return nameDictionary
下面是一些csv数据
Name Time Date
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
FName LName 12:00PM 10/5/20
我希望它能回来
"John Doe": {
"2020-09-01": "4:00PM",
"2020-09-03": "8:00AM",
"2020-09-04": "2:00PM",
"2020-09-14": "8:00AM",
"2020-09-16": "6:00PM",
"2020-09-22": "5:00PM",
"2020-09-23": "2:00PM",
"2020-09-25": "1:00PM",
"2020-09-30": "5:00PM",
"2020-10-01": "8:00PM",
"2020-10-05": "5:00PM",
"2020-10-08": "1:00PM",
"2020-10-09": "5:00PM",
"2020-10-10": "4:00PM",
"2020-10-12": "5:00PM",
"2020-10-14": "7:00PM"
}
但为了做到这一点,我需要索引字典中的每一列。这应该可以做到:
@app.route('/api/v1/resources/names', methods=['GET'])
def api_name():
if 'name' in request.args:
name = str(request.args['name'])
else:
return "Error: No name was provided, Please specify a first and last name"
return jsonify({name: main_data[name]})
出现该错误的原因是for循环等效于:
for key in main_data.keys(): #looping over a dict is equivalent to looping over its keys
index['Name'] = key
if index == name:
results.append(index)
。。。显然,您有一个名为index
的全局变量,它是某个字符串
如果您修复了该问题,您将得到:
for key in main_data():
if key == name:
results.append(key)
。。。这与执行以下操作相同:
results = [name]
。。。然后将其转换为字符串,并将该字符串序列化为JSON,这意味着您的请求将返回
“['John Doe']”
(包括引号字符!)请编辑您的问题,以显示您希望回复的内容http://127.0.0.1:5000/api/v1/resources/names?name=John%20Doe
to.done@Jasmijn-ty谢谢你看我的问题
results = [name]