TypeError: Невозможно сравнить тип 'Timestamp' с типом 'int' - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть несколько длинных кодов с проблемой, когда я пытаюсь объединить (или объединить / объединить) два набора данных, я получаю это TypeError: Cannot compare type 'Timestamp' with type 'int'

Оба набора данных получены из повторной выборки одинаково начальный начальный набор данных. master_hrs df - это процесс повторной выборки, использующий пакет алгоритма точки изменения Python, называемый rupters. (pip install ruptures для запуска кода). daily_summary df просто использует Pandas для пересчета среднесуточных значений и сумм. Но я получаю ошибку, когда пытаюсь объединить наборы данных вместе. Есть ли у кого-нибудь советы, чтобы попробовать?

Создание некоторых поддельных данных приводит к той же ошибке, что и мой набор данных реального мира. Я думаю, что проблема у меня заключается в том, что я пытаюсь сравнить datime с numpy кое-как ... Любые советы с благодарностью. Спасибо

import ruptures as rpt
import calendar

import numpy as np
import pandas as pd
np.random.seed(11)

rows,cols = 50000,2
data = np.random.rand(rows,cols) 
tidx = pd.date_range('2019-01-01', periods=rows, freq='H') 
df = pd.DataFrame(data, columns=['Temperature','Value'], index=tidx)

def changPointDf(df):
    arr = np.array(df.Value)
    #Define Binary Segmentation search method
    model = "l2"  
    algo = rpt.Binseg(model=model).fit(arr)
    my_bkps = algo.predict(n_bkps=5)
    # getting the timestamps of the change points
    bkps_timestamps = df.iloc[[0] + my_bkps[:-1] +[-1]].index
    # computing the durations between change points
    durations = (bkps_timestamps[1:] - bkps_timestamps[:-1])
    #hours calc
    d = durations.seconds/60/60
    d_f = pd.DataFrame(d)
    df2 = d_f.T
    return df2


master_hrs = pd.DataFrame()


for idx, days in df.groupby(df.index.date):
    changPoint_df = changPointDf(days)
    values = changPoint_df.values.tolist()
    master_hrs=master_hrs.append(values)


master_hrs.columns = ['overnight_AM_hrs', 'moring_startup_hrs', 'moring_ramp_hrs', 'high_load_hrs', 'evening_shoulder_hrs']

daily_summary = pd.DataFrame()

daily_summary['Temperature'] = df['Temperature'].resample('D').mean()
daily_summary['Value'] = df['Value'].resample('D').sum()

final_df = daily_summary.join(master_hrs)

1 Ответ

0 голосов
/ 29 апреля 2020

Проблема заключалась в самих индексах - master_hrs был int64, тогда как daily_summary был datetime. Включите это, прежде чем объединить два кадра данных:

master_hrs.index = pd.to_datetime(master_hrs.index)

Просто для ясности, вот мой вывод final_df:

            Temperature      Value  ...  high_load_hrs  evening_shoulder_hrs
2019-01-01     0.417517  12.154527  ...            NaN                   NaN
2019-01-02     0.521131  13.811842  ...            NaN                   NaN
2019-01-03     0.583205  12.568966  ...            NaN                   NaN
2019-01-04     0.448225  14.036136  ...            NaN                   NaN
2019-01-05     0.542870  10.738192  ...            NaN                   NaN
                ...        ...  ...            ...                   ...
2024-09-10     0.470421  13.775528  ...            NaN                   NaN
2024-09-11     0.384672  10.473930  ...            NaN                   NaN
2024-09-12     0.527284  14.000231  ...            NaN                   NaN
2024-09-13     0.555646  11.460867  ...            NaN                   NaN
2024-09-14     0.426003   3.763975  ...            NaN                   NaN

[2084 rows x 7 columns]

Надеюсь, это даст вам то, что вам нужно.

...