【问题标题】:How can I add a day to a datetime object using Python, using two conditions from a dataframe?如何使用 Python 使用数据框中的两个条件向 datetime 对象添加一天?
【发布时间】:2020-12-04 15:18:54
【问题描述】:

如果列中的时间在上午 1.59 之后,我想在我的列 CutoffSLAII 中添加一天,但是,如果列 FILE_START_TIME 也有一个早于 12:00 的时间,我只想添加一天。如果这两个条件都不满足,则应保留 CutoffSLAII 中的值。

我正在使用的代码确实可以运行,但数据帧中没有任何变化:

从日期时间导入日期时间、时间、时间增量 将熊猫导入为 pd

def add_a_day(row: pd.Series) -> datetime:
    if pd.isna(x['CutoffSLAII', 'FILE_START_TIME']):
        return x['CutoffSLAII', 'FILE_START_TIME']
    tme = x['CutoffSLAII'].time()
    tme1 = x['FILE_START_TIME'].time()

    if tme < time(12, 0, 0) and tme1 > time(1, 59, 0):
        return x['CutoffSLAII'] + timedelta(days=1)

数据:df2['CutoffSLAII'] = df2.apply(add_a_day, axis=1)

我希望添加一天的数据:

FILE_START_TIME 和 CutoffSLAII 都是 Datetime64[ns] dtypes,但是,当我与列中的一个值交互时,它们会作为时间戳返回。

输入:df2.iloc[0]['FILE_START_TIME']

输出:Timestamp('2020-11-02 19:23:47')

数据没有嵌入,因为我没有足够的声望点,很抱歉。

现在的错误信息是:

TypeError:字符串索引必须是整数

【问题讨论】:

标签: python pandas function datetime timedelta


【解决方案1】:

您的函数add_a_day 接受一个名为row 的变量,但作用于另一个名为x 的变量。 你可能想先解决这个问题!

【讨论】:

  • 您好,我应该更改函数以返回行而不是返回 x 吗?谢谢
  • 我想你现在已经知道你正在使用的变量x 没有在函数内部声明。这应该是 row 变量。
【解决方案2】:

我有点困惑发生了什么。 X 是否在其他地方被引用或者应该是引用行?当您在整个数据框上应用时,您还可以将行作为一个系列映射到日期时间。最后,我认为您试图错误地引用行。

if pd.isna(x['CutoffSLAII']) or pd.isna(x['FILE_START_TIME'])):

【讨论】:

  • X 应该引用该行。我已将最后的代码更改为 df2["CutoffSLAII"].apply。我将添加对问题的编辑。对不起,我以前从未写过函数!只是为了我的理解,您是否认为 x 不需要引用该行?如果不是,你能解释一下为什么吗?谢谢
  • 嘿,所以我认为您对 x 通常所做的事情有些混淆。 x 通常用作迭代器或存储值。 x 没有预定义的值。在您的函数中,您尚未将 x 定义为任何内容。您应该使用输入参数“row”来访问该行值。还要小心,因为如果您进行更改 df2["CutoffSLAII"].apply(function) 您现在将直接应用于该列并且将无法访问“FILE_START_TIME”。我会将其保留为 df2.apply(function) ,因为您计划访问多个列。如果您仍然遇到问题,我可以编辑我的答案:)
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多