提问人: 提问时间:4/7/2023 更新时间:4/7/2023 访问量:55
Pandas 时间戳和 .isin 功能
Pandas Timestamp and .isin functionality
问:
我正在尝试创建一个函数,我将 .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 数据帧对 中的所有值运行函数,而不是在 中运行函数。因此,将是一个没有方法的时间戳。你应该做的是这样的:apply
pd.Series
pd.Series
trade_date
isin
def test(trade_date):
return (trade_date - BDay(1)) in pricing_date
或者,更简单:
df['Check'] = (df['test_date']-BDay(1)).isin(pricing_date)
评论