Pandas DataFrame медленно добавляется при добавлении сотен DataFrame с тысячами строк в каждом - PullRequest
0 голосов
/ 19 сентября 2018

Переменная «данные» в приведенном ниже коде содержит сотни результатов выполнения запросов к базе данных.Каждый результат выполнения представляет собой один день данных, содержащий примерно 7 000 строк данных (столбцы - метка времени и значение).Я добавляю каждый день друг к другу, в результате чего получается несколько миллионов строк данных (эти сотни добавлений занимают много времени).После того, как у меня есть полный набор данных для одного датчика, я сохраняю эти данные в виде столбца в DataFrame unitdf, затем повторяю описанную выше процедуру для каждого датчика и объединяю их все в DataFrame unitdf.

Я считаю, что добавление и слияние являются дорогостоящими операциями.Единственное возможное решение, которое я мог найти, - это разделение каждого столбца на списки, и как только все данные добавляются в список, объединяют все столбцы в DataFrame.Любые предложения, чтобы ускорить процесс?

i = 0
for sensor_id in sensors: #loop through each of the 20 sensors
    #prepared statement to query Cassandra
    session_data = session.prepare("select  timestamp, value from measurements_by_sensor where unit_id = ? and sensor_id = ? and date = ? ORDER BY timestamp ASC")
    #Executing prepared statement over a range of dates    
    data = execute_concurrent(session, ((session_data, (unit_id, sensor_id, date)) for date in dates), concurrency=150, raise_on_first_error=False)

    sensordf = pd.DataFrame()
    #Loops through the execution results and appends all successful executions that contain data
    for (success, result) in data:
        if success:
          sensordf = sensordf.append(pd.DataFrame(result.current_rows))

    sensordf.rename(columns={'value':sensor_id}, inplace=True) 
    sensordf['timestamp'] = pd.to_datetime(sensordf['timestamp'], format = "%Y-%m-%d %H:%M:%S", errors='coerce')
    if i == 0:
        i+=1
        unitdf = sensordf
    else:
        unitdf = unitdf.merge(sensordf, how='outer')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...