gpt4 book ai didi

python - 如何改进 Python 中的这个循环以提高速度

转载 作者:太空宇宙 更新时间:2023-11-03 14:42:58 24 4
gpt4 key购买 nike

我正在从 police.uk 的 API 中以 JSON 文件的形式读取数据,然后遍历该文件以将数据传递到 pandas 数据帧中。

我用来从 JSON 中提取并放入 DataFrame 的循环进行得非常缓慢。

警察 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']

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

最佳答案

使用json_normalize使用 rename 列:

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

关于python - 如何改进 Python 中的这个循环以提高速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com