关于求股票交易日的问题,求帮忙,谢谢
import pandas as pddata = [["2022-12-21",""],["2022-12-20",""],["2022-12-19",""],
["2022-12-18",""],["2022-12-17",""],
["2022-12-16",""],["2022-12-12",""]]
columns = ["准备提交日期","股票交易日"]
df = pd.DataFrame(data, columns=columns)
df
#想把准备提交日期转化为股票交易日,即准备日当天如果是交易日,那股票交易日就等于准备日
如果准备日不是交易日,就计算准备日后几天是交易日,如准备日是2023/4/15日,那交易日就是2023/4/17
求大师帮忙,谢谢 您好!根据您的需求,我给出了一个解决方案。在这个方案中,我们首先需要找到每个日期是否为交易日,然后将“准备提交日期”转换为“股票交易日”。以下是一个示例代码:
import pandas as pd
from datetime import datetime, timedelta
data = [["2022-12-21",""],["2022-12-20",""],["2022-12-19",""],
["2022-12-18",""],["2022-12-17",""],
["2022-12-16",""],["2022-12-12",""]]
columns = ["准备提交日期","股票交易日"]
df = pd.DataFrame(data, columns=columns)
# 判断是否为交易日
def is_trading_day(date):
# 周六、周日为非交易日
if date.weekday() >= 5:
return False
# TODO: 您可以在此处添加其他非交易日的判断逻辑,例如法定节假日
return True
# 获取下一个交易日
def get_next_trading_day(date):
while not is_trading_day(date):
date += timedelta(days=1)
return date
# 转换准备提交日期为股票交易日
for index, row in df.iterrows():
prepared_date = datetime.strptime(row['准备提交日期'], '%Y-%m-%d').date()
trading_day = get_next_trading_day(prepared_date)
df.at = trading_day.strftime('%Y-%m-%d')
print(df)
此代码中,我定义了两个辅助函数,分别用于判断给定日期是否为交易日(is_trading_day),以及查找给定日期后的第一个交易日(get_next_trading_day)。然后在主循环中,我使用这两个函数将“准备提交日期”转换为“股票交易日”。
请注意,这个示例中我只考虑了周六和周日为非交易日,如果需要考虑其他非交易日,例如法定节假日,您需要在 is_trading_day 函数中添加相应的逻辑。
希望对您有所帮助!如果您有任何疑问,请随时提问。 isdkz 发表于 2023-4-17 10:36
您好!根据您的需求,我给出了一个解决方案。在这个方案中,我们首先需要找到每个日期是否为交易日,然后将 ...
大佬好,我想知道你用的是哪个chatgpt镜像站?{:10_264:} 歌者文明清理员 发表于 2023-4-17 10:44
大佬好,我想知道你用的是哪个chatgpt镜像站?
我不用镜像站,用的是官方的站 isdkz 发表于 2023-4-17 10:54
我不用镜像站,用的是官方的站
你没被封? import exchange_calendars as xcals
def is_tradeday(date):
xshg = xcals.get_calendar('XSHG')
if xshg.is_session(date):
trade_date = date
else:
trade_date = xshg.date_to_session(date, direction='next').strftime("%Y-%m-%d")
return trade_date
tdate = is_tradeday('2023/4/15')
print(tdate) 歌者文明清理员 发表于 2023-4-17 10:54
你没被封?
没有呀,你咋就被封了,你不是因为网络问题访问不了官方的站吗? isdkz 发表于 2023-4-17 11:02
没有呀,你咋就被封了,你不是因为网络问题访问不了官方的站吗?
https://fishc.com.cn/thread-226483-1-1.html 歌者文明清理员 发表于 2023-4-17 11:04
https://fishc.com.cn/thread-226483-1-1.html
好吧,我就被封了两个小号,问题不大 isdkz 发表于 2023-4-17 11:05
好吧,我就被封了两个小号,问题不大
6楼楼主在求救 futui 发表于 2023-4-17 11:02
import exchange_calendars as xcals
def is_tradeday(date):
@isdkz 歌者文明清理员 发表于 2023-4-17 11:11
@isdkz
他应该不是求助,是找到了更好的方法,我可以给出代码解释 isdkz 发表于 2023-4-17 11:12
他应该不是求助,是找到了更好的方法
用他的帖子内容问问机器人 futui 发表于 2023-4-17 11:02
import exchange_calendars as xcals
def is_tradeday(date):
在此代码片段中,使用了 exchange_calendars 库来确定给定日期是否是上海证券交易所(XSHG)的交易日。
is_tradeday() 函数接受一个日期作为输入,并检查它是否是交易日。如果是交易日,则返回该日期。
如果不是交易日,则返回下一个交易日。然后,代码使用输入日期 '2023/4/15' 调用 is_tradeday() 函数并打印结果。
以下是带有注释的代码,以便更好地理解:
import exchange_calendars as xcals
# 定义接受日期作为输入的 is_tradeday() 函数
def is_tradeday(date):
# 获取上海证券交易所的日历
xshg = xcals.get_calendar('XSHG')
# 检查输入日期是否为交易日
if xshg.is_session(date):
trade_date = date
else:
# 如果不是交易日,则获取下一个交易日
trade_date = xshg.date_to_session(date, direction='next').strftime("%Y-%m-%d")
# 返回交易日
return trade_date
# 用输入日期调用 is_tradeday() 函数
tdate = is_tradeday('2023/4/15')
# 打印交易日
print(tdate)
请注意,输入日期格式应与库的预期格式保持一致(例如 "YYYY-MM-DD")。在上面的示例中,您提供的日期为 '2023/4/15'。我建议将其更改为 '2023-04-15' 以保持一致:
tdate = is_tradeday('2023-04-15')
执行代码后,您应该看到输出:
2023-04-17
这表明 2023 年 4 月 15 日之后的下一个交易日是 2023 年 4 月 17 日。
页:
[1]