如何在Python中改善此循环以提高速度

时间:2018-08-22 10:05:46

标签: python json pandas api loops

我正在从Police.uk的API中读取数据作为JSON文件,然后遍历该文件以将数据传递到熊猫数据框。

我用来从JSON提取并放入DataFrame的循环进行得很慢。

Police API仅允许您一次一个月下载数据。因此,我使用日期列表和循环来下载一个月以上的数据。

代码在下面。 是否有任何方法可以改善该循环以使其更快?我想从API下载更多数据。

import pandas as pd
import numpy as np
import requests
import json
import matplotlib.pyplot as plt
import datetime

%matplotlib inline
plt.rcParams['figure.figsize'] = (10, 5)

#Create list of periods to download data for
periods = ['2017-03', '2017-04', '2017-05', '2017-06']

#Create empty list to store retrieved JSON data
data = []

警察API网址

url = 'https://data.police.uk/api/crimes-street/all-crime'

循环下载数据并追加列表

for date in periods:
    parameters = {'poly': '51.6,0.06:51.6,0.2:51.5,0.2:51.5,0.062', 'date': date}
    #Query API for data
    response = requests.get(url, params=parameters)
    data += json.loads(response.content)
    print(len(data))

创建空数据框

df = pd.DataFrame()

============================================

---这是运行很慢的部分-----

将JSON文件中的相关部分提取到Dataframe中

for i in range(len(data)):
    df.loc[i, 'id'] = data[i]['id']
    df.loc[i, 'category'] = data[i]['category']
    df.loc[i, 'month'] = data[i]['month']
    df.loc[i, 'latitude'] = data[i]['location']['latitude']
    df.loc[i, 'longitude'] = data[i]['location']['longitude']

============================================= < / p>

1 个答案:

答案 0 :(得分:4)

json_normalizerename列一起使用:

from pandas.io.json import json_normalize

data = [{'id': 1, 'category': 2, 'month': 1, 'location': {'latitude': 100, 'longitude': 200}},
        {'id': 2, 'category': 3, 'month': 2, 'location': {'latitude': 500, 'longitude': 100}}]

df = json_normalize(data)
df = df.rename(columns={'location.latitude':'latitude','location.longitude':'longitude'})
print (df)
   category  id  latitude  longitude  month
0         2   1       100        200      1
1         3   2       500        100      2