使用 python => 从 JSON 到 pandas DataFrame 使用 REStful API 数据
Consume REStful API data with python => from JSON to pandas DataFrame
from flask import Flask, request
from flask_restful import Resource, Api, reqparse
#from flask_jwt import JWT, jwt_required
from pymongo import MongoClient
import pandas as pd
app = Flask(__name__)
app.secret_key = 'xxx'
api = Api(app)
class Data(Resource):
def get(self):
client = MongoClient("localhost", 27017)
db = client.test
collection = db.my_collection.find({})
df = pd.DataFrame(list(collection))
df = df.iloc[1:5:,1:(len(df.columns))] ### ID Variable raushauen, führt zu OverflowError
return df.to_json(orient="columns")
api.add_resource(Data, "/data/") # http://127.0.0.1:5000/data/
app.run(port = 5000, debug=True)
大家好。这是我在本地主机上 运行 的小 API。我只是发送了 titanic 数据集的一个子集。
当我尝试在浏览器中访问数据时,我收到以下信息:
"{\"PassengerId\":{\"1\":2,\"2\":3,\"3\":4,\"4\":5},\"Survived\":{\"1\":1,\"2\":1,\"3\":1,\"4\":0},\"Pclass\":{\"1\":1,\"2\":3,\"3\":1,\"4\":3},\"Name\":{\"1\":\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",\"2\":\"Heikkinen, Miss. Laina\",\"3\":\"Futrelle, Mrs. Jacques Heath (Lily May Peel)\",\"4\":\"Allen, Mr. William Henry\"},\"Sex\":{\"1\":\"female\",\"2\":\"female\",\"3\":\"female\",\"4\":\"male\"},\"Age\":{\"1\":38.0,\"2\":26.0,\"3\":35.0,\"4\":35.0},\"SibSp\":{\"1\":1,\"2\":0,\"3\":1,\"4\":0},\"Parch\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0},\"Ticket\":{\"1\":\"PC 17599\",\"2\":\"STON\/O2. 3101282\",\"3\":\"113803\",\"4\":\"373450\"},\"Fare\":{\"1\":71.2833,\"2\":7.925,\"3\":53.1,\"4\":8.05},\"Cabin\":{\"1\":\"C85\",\"2\":null,\"3\":\"C123\",\"4\":null},\"Embarked\":{\"1\":\"C\",\"2\":\"S\",\"3\":\"S\",\"4\":\"S\"}}"
现在我尝试使用 API 并再次将数据读入数据帧。
以下代码会产生一个看起来很奇怪的文本对象:
r = requests.get('http://localhost:5000/data/')
data = r.text
Out[90]: '"{\"PassengerId\":{\"1\":2,\"2\":3,\"3\":4,\"4\":5},\"Survived\":{\"1\":1,\"2\":1,\"3\":1,\"4\":0},\"Pclass\":{\"1\":1,\"2\":3,\"3\":1,\"4\":3},\"Name\":{\"1\":\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",\"2\":\"Heikkinen, Miss. Laina\",\"3\":\"Futrelle, Mrs. Jacques Heath (Lily May Peel)\",\"4\":\"Allen, Mr. William Henry\"},\"Sex\":{\"1\":\"female\",\"2\":\"female\",\"3\":\"female\",\"4\":\"male\"},\"Age\":{\"1\":38.0,\"2\":26.0,\"3\":35.0,\"4\":35.0},\"SibSp\":{\"1\":1,\"2\":0,\"3\":1,\"4\":0},\"Parch\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0},\"Ticket\":{\"1\":\"PC 17599\",\"2\":\"STON\\/O2. 3101282\",\"3\":\"113803\",\"4\":\"373450\"},\"Fare\":{\"1\":71.2833,\"2\":7.925,\"3\":53.1,\"4\":8.05},\"Cabin\":{\"1\":\"C85\",\"2\":null,\"3\":\"C123\",\"4\":null},\"Embarked\":{\"1\":\"C\",\"2\":\"S\",\"3\":\"S\",\"4\":\"S\"}}"\n'
当我 运行 以下代码时会导致错误:
df = pd.read_json(data, orient="columns")
ValueError: DataFrame constructor not properly called!
这是我第一次创建API...您能告诉我在哪些步骤中发生错误以及如何修复它吗?谢谢。
您的 JSON 数据有问题,请尝试以下操作:
data = r.text
str_data = json.loads(data)
json_data = json.loads(str_data)
pd.DataFrame(json_data)
或
data = r.text
json_data = json.loads(data)
pd.read_json(json_data)
from flask import Flask, request
from flask_restful import Resource, Api, reqparse
#from flask_jwt import JWT, jwt_required
from pymongo import MongoClient
import pandas as pd
app = Flask(__name__)
app.secret_key = 'xxx'
api = Api(app)
class Data(Resource):
def get(self):
client = MongoClient("localhost", 27017)
db = client.test
collection = db.my_collection.find({})
df = pd.DataFrame(list(collection))
df = df.iloc[1:5:,1:(len(df.columns))] ### ID Variable raushauen, führt zu OverflowError
return df.to_json(orient="columns")
api.add_resource(Data, "/data/") # http://127.0.0.1:5000/data/
app.run(port = 5000, debug=True)
大家好。这是我在本地主机上 运行 的小 API。我只是发送了 titanic 数据集的一个子集。
当我尝试在浏览器中访问数据时,我收到以下信息:
"{\"PassengerId\":{\"1\":2,\"2\":3,\"3\":4,\"4\":5},\"Survived\":{\"1\":1,\"2\":1,\"3\":1,\"4\":0},\"Pclass\":{\"1\":1,\"2\":3,\"3\":1,\"4\":3},\"Name\":{\"1\":\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",\"2\":\"Heikkinen, Miss. Laina\",\"3\":\"Futrelle, Mrs. Jacques Heath (Lily May Peel)\",\"4\":\"Allen, Mr. William Henry\"},\"Sex\":{\"1\":\"female\",\"2\":\"female\",\"3\":\"female\",\"4\":\"male\"},\"Age\":{\"1\":38.0,\"2\":26.0,\"3\":35.0,\"4\":35.0},\"SibSp\":{\"1\":1,\"2\":0,\"3\":1,\"4\":0},\"Parch\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0},\"Ticket\":{\"1\":\"PC 17599\",\"2\":\"STON\/O2. 3101282\",\"3\":\"113803\",\"4\":\"373450\"},\"Fare\":{\"1\":71.2833,\"2\":7.925,\"3\":53.1,\"4\":8.05},\"Cabin\":{\"1\":\"C85\",\"2\":null,\"3\":\"C123\",\"4\":null},\"Embarked\":{\"1\":\"C\",\"2\":\"S\",\"3\":\"S\",\"4\":\"S\"}}"
现在我尝试使用 API 并再次将数据读入数据帧。 以下代码会产生一个看起来很奇怪的文本对象:
r = requests.get('http://localhost:5000/data/')
data = r.text
Out[90]: '"{\"PassengerId\":{\"1\":2,\"2\":3,\"3\":4,\"4\":5},\"Survived\":{\"1\":1,\"2\":1,\"3\":1,\"4\":0},\"Pclass\":{\"1\":1,\"2\":3,\"3\":1,\"4\":3},\"Name\":{\"1\":\"Cumings, Mrs. John Bradley (Florence Briggs Thayer)\",\"2\":\"Heikkinen, Miss. Laina\",\"3\":\"Futrelle, Mrs. Jacques Heath (Lily May Peel)\",\"4\":\"Allen, Mr. William Henry\"},\"Sex\":{\"1\":\"female\",\"2\":\"female\",\"3\":\"female\",\"4\":\"male\"},\"Age\":{\"1\":38.0,\"2\":26.0,\"3\":35.0,\"4\":35.0},\"SibSp\":{\"1\":1,\"2\":0,\"3\":1,\"4\":0},\"Parch\":{\"1\":0,\"2\":0,\"3\":0,\"4\":0},\"Ticket\":{\"1\":\"PC 17599\",\"2\":\"STON\\/O2. 3101282\",\"3\":\"113803\",\"4\":\"373450\"},\"Fare\":{\"1\":71.2833,\"2\":7.925,\"3\":53.1,\"4\":8.05},\"Cabin\":{\"1\":\"C85\",\"2\":null,\"3\":\"C123\",\"4\":null},\"Embarked\":{\"1\":\"C\",\"2\":\"S\",\"3\":\"S\",\"4\":\"S\"}}"\n'
当我 运行 以下代码时会导致错误:
df = pd.read_json(data, orient="columns")
ValueError: DataFrame constructor not properly called!
这是我第一次创建API...您能告诉我在哪些步骤中发生错误以及如何修复它吗?谢谢。
您的 JSON 数据有问题,请尝试以下操作:
data = r.text
str_data = json.loads(data)
json_data = json.loads(str_data)
pd.DataFrame(json_data)
或
data = r.text
json_data = json.loads(data)
pd.read_json(json_data)