Могу ли я выполнить функцию в «применить» к фрейму данных pandas асинхронно? (Могу ли я выполнить функцию в «применить» к фрейму данных pandas асинхронно?)Однако у меня есть почти 1000000 записей, для которых мне приходится отправлять запросы и сохранять их в существующем фрейме данных.
Вот сокращенный пример кода к его основам для контекста:
Код: Выделить всё
import pandas as pd
import mysql.connector
DATABASE1 = ["list of connection dicts"]
SQL_QUERY = "select query"
def fetch_service_status_details(row):
user_id = row["user_id"]
service_id = row["service_id"]
url = SERVICE_URL + "/" + service_id + "/" + user_id
resp = requests.get(url, headers=headers, verify=False)
row["resp_code"] = resp.status_code
if resp.ok:
row["has_active_service"] = (
resp.json()["data"]["has_active_service"]
if resp.json()["success"]
else "NO_DATA"
)
else:
row["has_active_service"] = (
"FAILED_TO_FETCH::" + str(resp.status_code) + "::" + str(resp.text)
)
return row
def connection(connection_dct):
db = mysql.connector.connect(
host=connection_dct["host"], user=connection_dct["user"], password=connection_dct["password"], database=connection_dct["database"]
)
return db
def generate_df():
data = pd.DataFrame(columns=["service_id", "user_id"])
for db in DATABASE1:
conn = connection(db)
temp = pd.read_sql(SQL_QUERY, conn)
data = pd.concat([data, temp])
return data
if __name__ == "__main__":
data = generate_df()
data = data.apply(fetch_mandate_status_details, axis=1)
rest of calculative operations on df
Сначала я попробовал это сделать. строка за строкой, однако после долгого выполнения и изучения я обнаружил, что перебирать строки в пандах — это идиотизм.
Подробнее здесь: https://stackoverflow.com/questions/787 ... rame-apply