Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

249
Views
Error de tipo de Python al agregar TimedeltaIndex a la fecha

Estoy usando Python 3.7.12 y trato de comprender el comportamiento de agregar un objeto pandas.TimedeltaIndex a un objeto datetime.date , y específicamente por qué a veces obtengo un TypeError: unsupported operand type(s) for +: 'TimedeltaArray' and 'datetime.date' Error TypeError: unsupported operand type(s) for +: 'TimedeltaArray' and 'datetime.date' . Extraigo datos de una fuente y los cargo en un marco de datos con una o más filas, y trato de agregar una nueva columna a todas las filas que contienen la suma de datetime.date y pandas.TimedeltaIndex para esa fila. Mi código funciona siempre que haya al menos dos filas en el marco de datos, por ejemplo

 import pandas as pd import logging logging.basicConfig(level=logging.DEBUG) data = {'dates': [pd.to_datetime('2017-04-27 15:59:59', format='%Y-%m-%d %H:%M:%S'), pd.to_datetime('2017-04-28 15:59:59', format='%Y-%m-%d %H:%M:%S')], 'deltas': ['90', '180']} df = pd.DataFrame(data) df['adjusted_dates'] = df['dates'].dt.date + pd.TimedeltaIndex(df['deltas'].astype('int64'), unit='D') # The deltas have been applied and df is in the expected shape logging.debug("Job done")

Sin embargo, si tengo exactamente una fila en mi marco de datos, aparece el error:

 import pandas as pd import logging logging.basicConfig(level=logging.DEBUG) data = {'dates': [pd.to_datetime('2017-04-27 15:59:59', format='%Y-%m-%d %H:%M:%S')], 'deltas': ['90']} df = pd.DataFrame(data) # TypeError: unsupported operand type(s) for +: 'TimedeltaArray' and 'datetime.date' df['adjusted_dates'] = df['dates'].dt.date + pd.TimedeltaIndex(df['deltas'].astype('int64'), unit='D') # We don't get this far logging.debug("Job done")

¿Por qué veo este error para marcos de datos de una sola fila? Cualquier ayuda sería muy apreciada.

EDITAR: Encontré otra pregunta aquí en Stack Overflow que responde por qué mi código a veces falla: Python Pandas: TypeError: tipos de operandos no admitidos para +: 'datetime.time' y 'Timedelta'

Estaba intentando agregar un objeto delta de Pandas a una fecha y datetime de Python, pero estas dos pilas son incompatibles. Cuando tengo objetos Pandas para ambos operandos, el marco de datos se actualiza como se esperaba para marcos de datos de una sola fila y de varias filas.

 df['adjusted_dates'] = df['dates'] + pd.TimedeltaIndex(df['deltas'].astype('int64'), unit='D')

Ahora que veo por qué mi código no siempre tuvo éxito, estoy confundido en cuanto a por qué no siempre falló.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Puedes simplificar a

 import pandas as pd df = pd.DataFrame({'dates': ['2017-04-27 15:59:59', '2017-04-28 15:59:59'], 'deltas': ['90', '180']}) # no need to provide a format, no need to use an index: df['adjusted_dates'] = (pd.to_datetime(df['dates']) + pd.to_timedelta(df['deltas'].astype(int), unit='D')) # df['adjusted_dates'] # 0 2017-07-26 15:59:59 # 1 2017-10-25 15:59:59 # Name: adjusted_dates, dtype: datetime64[ns]

O, si solo desea agregar el timedelta a la fecha , ignorando la hora:

 df['adjusted_dates'] = (pd.to_datetime(df['dates']).dt.floor('D') + pd.to_timedelta(df['deltas'].astype(int), unit='D')) # df['adjusted_dates'] # 0 2017-07-26 # 1 2017-10-25 # Name: adjusted_dates, dtype: datetime64[ns]

Tenga en cuenta que en ambos casos, tendrá el tipo de datos datetime64[ns] . Si baja al día, la hora simplemente no se muestra (el valor predeterminado es cero / 00:00:00).

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!