Это скорее вопрос проверки / улучшения кода, как я указал в вопросах. Так что я, вероятно, задам такие вопросы там в будущем.
Однако, поскольку я вижу, что они время от времени возникают, я решил, что поделюсь тем, как вам (вероятно) следует думать в таких ситуациях. Итак, первое, что вам нужно сделать, это использовать свои человеческие сверхспособности для поиска закономерностей. Мы, люди (пока) неплохо умеем замечать закономерности в больших коллекциях данных. В вашем случае очевидные из них:
(я преобразовал ваш псевдокод в нечто более реалистичное c, опять же, опубликуйте свой реальный код и замаскируйте только важные вещи.Например, поля запроса GET не должны быть замаскированы там, где должен быть ключ / токен. Я пропустил исправление ваших шаблонов даты, которые не работали, поскольку они лучше выделялись цветом таким образом, чтобы выделить шаблон видел).
Вот минимальный рабочий пример:
import requests
import pandas as pd
headers = {'user-agent': 'abc'}
_api_token = 'api key'
r1 = requests.get('http://url/json.php',
params={"workspace_id" : "xyz", "since" : "2017-01-01", "until" : "2017-12-31"},
auth= (_api_token, 'api_token'),
headers=headers)
r2 = requests.get('http://url/json.php',
params={"workspace_id" : "xyz", "since" : "2018-01-01", "until" : "2018-12-31"},
auth= (_api_token, 'api_token'),
headers=headers)
r3 = requests.get('http://url/json.php',
params={"workspace_id" : "xyz", "since" : "2019-01-01", "until" : "2019-12-31"},
auth=(_api_token, 'api_token'),
headers=headers)
r4 = requests.get('http://url/json.php',
params={"workspace_id" : "xyz", "since" : "2020-01-01", "until" : "2020-05-05"},
auth= (_api_token, 'api_token'),
headers=headers)
x1 = r1.json()
x2 = r2.json()
x3 = r3.json()
x4 = r4.json()
df1 = pd.DataFrame(x1['data'])
df2 = pd.DataFrame(x2['data'])
df3 = pd.DataFrame(x3['data'])
df4 = pd.DataFrame(x4['data'])
Теперь, чтобы уменьшить это, мы сначала закрепим каждый узор. Это связано с тем, что большую часть времени решение всей проблемы будет слишком сложным, поэтому мы сокращаем задачу до меньших рабочих нагрузок.
Итак, первый шаблон можно сократить до:
def get_data(since, until):
return = requests.get('http://url/json.php',
params={"workspace_id" : "xyz", "since" : since, "until" : until},
auth= (_api_token, 'api_token'),
headers=headers)
dates = [
{"since" : "2017-01-01", "until" : "2017-12-31"},
{"since" : "2018-01-01", "until" : "2018-12-31"},
{"since" : "2019-01-01", "until" : "2019-12-31"},
{"since" : "2020-01-01", "until" : "2020-05-05"}
]
for date_pair_dict in dates:
r = get_data(**date_pair_dict) # We can use dictionary->parameter expansion this way
# which equals doing get_data(since=date_pair_dict['since'], ...)
Это сокращение не очень велико, но оно уже решает / подсказывает, что мы будем делать дальше.
Это значит включить шаблоны 2 и 3 в этот новый синтаксис и использовать тот факт, что мы уже перебираем since
и until
, и там можно работать с данными вместо того, чтобы сохранять их, а затем работать с ними.
Это будет сводиться к:
import requests
import pandas as pd
headers = {'user-agent': 'abc'}
_api_token = 'api key'
def get_data(since, until):
return = requests.get('http://url/json.php',
params={"workspace_id" : "xyz", "since" : since, "until" : until},
auth= (_api_token, 'api_token'),
headers=headers)
dates = [
{"since" : "2017-01-01", "until" : "2017-12-31"},
{"since" : "2018-01-01", "until" : "2018-12-31"},
{"since" : "2019-01-01", "until" : "2019-12-31"},
{"since" : "2020-01-01", "until" : "2020-05-05"}
]
for date_pair_dict in dates:
r = get_data(**date_pair_dict) # We can use dictionary->parameter expansion this way
# which equals doing get_data(since=date_pair_dict['since'], ...)
x = r.json()
df = pd.DataFrame(x['data'])
Теперь, потому что это только частичное код, который вы указали.
Мы понятия не имеем, для чего вы на самом деле используете эти фреймы данных в pandas. Но вы можете поместить df = pd.DataFrame(...)
в свою get_data
функцию, а затем сохранить и работать над ними позже.
Но это, надеюсь, даст вам представление о том, как создавать повторно используемый код и как бороться с ними. с шаблонами в коде и, возможно, написать код, который можно использовать повторно, а не копировать.
Заключительное примечание
Пожалуйста, опубликуйте рабочий код в будущем, мы потратим много времени помогать людям. Последнее, что нам нужно сделать, это помочь людям создать рабочий пример проблемы, чтобы затем мы могли помочь людям с их реальной проблемой. Мы работаем бесплатно и хотим помочь, упростите нам помощь :)
Удачи в вашем проекте.