Pandas 时间戳和 .isin 功能

Pandas Timestamp and .isin functionality

提问人: 提问时间:4/7/2023 更新时间:4/7/2023 访问量:55

问:

我正在尝试创建一个函数,我将 .apply() 到数据帧以:

  • 将一个工作日从提供的参数中删除到函数中
  • 检查此新日期是否位于特定的日期集合中(格式化为日期时间索引)

我已经简化了我的函数的逻辑来解决这个问题 - 我稍后会添加更多逻辑。

我的功能:

def test(trade_date):
    if (trade_date - BDay(1)).isin(pricing_date):
        return True
    else:
        return False

错误:

AttributeError: 'Timestamp' object has no attribute 'isin'

看起来使用带有时间戳的 .isin 存在问题。但是,当我在数据帧本身中运行代码进行测试时:

df['Check'] = df['test_date'].isin(pricing_date)

返回预期的输出 - isin() 确实可以正常处理此数据。

TradeDate
2023-01-03    False
2023-01-03    False
2023-01-03    False
2023-01-03    False
2023-01-03    False
              ...  
2023-03-22     True
2023-03-22     True
2023-03-22     True
2023-03-22     True
2023-03-22     True
Name: Check, Length: 14324, dtype: bool

调用 .isin() 的列的数据类型为:datetime64[ns],但不确定如何将我的函数中的时间戳转换为这种数据类型 - 我在很多地方读到它们实际上是等价的,只是来自 python vs pandas 的类型。

Name: test_date, Length: 14324, dtype: datetime64[ns]

任何帮助都是值得赞赏的!

尝试将时间戳传递到 .isin - 直接在数据帧上运行它的预期输出。

熊猫 麻木 日期时间 伊辛

评论


答:

1赞 Bruno Mello 4/7/2023 #1

Pandas 数据帧对 中的所有运行函数,而不是在 中运行函数。因此,将是一个没有方法的时间戳。你应该做的是这样的:applypd.Seriespd.Seriestrade_dateisin

def test(trade_date):
    return (trade_date - BDay(1)) in pricing_date

或者,更简单:

df['Check'] = (df['test_date']-BDay(1)).isin(pricing_date)