我正在使用 Python 3.7.12 并试图理解添加pandas.TimedeltaIndex
反对datetime.date
对象,特别是为什么我有时会得到一个TypeError: unsupported operand type(s) for +: 'TimedeltaArray' and 'datetime.date'
错误。我正在从源中提取数据并将其加载到包含一行或多行的数据框中,并尝试向包含行之和的所有行添加新列datetime.date
and pandas.TimedeltaIndex
对于该行。只要数据框中至少有两行,我的代码就可以工作,例如
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")
但是,如果我的数据框中只有一行,则会收到错误:
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")
为什么我会在单行数据帧中看到此错误?任何帮助将不胜感激。
编辑:我在 Stack Overflow 上发现了另一个问题,它回答了为什么我的代码有时会失败:Python Pandas:类型错误:+ 不支持的操作数类型:“datetime.time”和“Timedelta” https://stackoverflow.com/questions/43506680/python-pandas-typeerror-unsupported-operand-types-for-datetime-time-and
我试图添加熊猫delta
Python 对象datetime
,但这两个堆栈不兼容。当我的两个操作数都有 Pandas 对象时,数据帧会按单行和多行数据帧的预期进行更新。
df['adjusted_dates'] = df['dates'] + pd.TimedeltaIndex(df['deltas'].astype('int64'), unit='D')
现在我明白了为什么我的代码并不总是成功,我很困惑为什么它并不总是失败?