AssertionError:输入必须具有相同的时区 pytz。FixedOffset(-240) != 美国/New_York

AssertionError: Inputs must both have the same timezone, pytz.FixedOffset(-240) != America/New_York

提问人:Almodius 提问时间:8/18/2023 最后编辑:FObersteinerAlmodius 更新时间:8/18/2023 访问量:48

问:

File1.py 将 CSV 打开为“DF”并创建一个图形。由于使用的份额是纽约市,因此时间为 -4。


   df_y = pd.read_csv("Meta.csv")
   df_y['Datetime'] = pd.to_datetime(df_y['Datetime'])
   df_y.set_index('Datetime',inplace=True)
   
   d = df_y.index[0]
   b = df_y.index[-1]
   
   dt_all = pd.date_range(start=d,end=b,freq='30min')
   
   marged_index = dt_all.append(df_y.index)
   timegap = marged_index[~marged_index.duplicated(keep = False)]
   
   fig = make_subplots(rows=1, cols=1)
   fig.add_ohlc(x=df_y.index,
                open=df_y['Open'],
                high=df_y['High'],
                low=df_y['Low'],
                close=df_y['Close'],
                name='stock',
                decreasing_line_color='#21201f',
                increasing_line_color='#21201f',
                row=1, col=1)
   fig.update_xaxes(showgrid=False,
                    zeroline=False,
                    showticklabels=True,
                    showspikes=True,
                    spikemode='across',
                    spikesnap='cursor',
                    showline=False,
                    rangebreaks=[
                        dict(values=timegap, dvalue=1800000), # 30min:1000msec*60sec*30min
                    ],
                    rangeslider_visible=False)
   fig.show()

该脚本工作正常,但有第二个文件 cron.py 每 30 分钟在 Windows 操作系统中执行一次 file1.py。

    from datetime import datetime
    from time import sleep
    import os
    def main():
        first = True
        t_var=(1,31)
        
        while first is True:
            now = datetime.now()
            if now.minute in t_var:
                os.system("python3 file1.py")
            sleep(80)

我的电脑在欧盟,在测试 cron.py 时显示以下错误。 在那之后,file1.py 不再独自奔跑。 我的理解是与使用的时区存在冲突。但这是在不同时区运行的两个脚本上发生的。

不幸的是,我不熟悉 python 局部变量,您能建议任何详细解释它如何工作的文档吗?Local_vars在我读过的 python 教科书中没有解释。我过去在本地设置方面遇到了其他问题,我想学习“python架构”,但不确定如何接近

重新启动 PC 后,两个脚本都工作正常(强化了我对local_var的假设)

Traceback (most recent call last):
  File "C:\Program Files\Python37\Lib\site-packages\pandas\core\arrays\datetimes.py", line 2422, in _infer_tz_from_endpoints
    inferred_tz = timezones.infer_tzinfo(start, end)
  File "pandas\_libs\tslibs\timezones.pyx", line 328, in pandas._libs.tslibs.timezones.infer_tzinfo
AssertionError: Inputs must both have the same timezone, pytz.FixedOffset(-240) != America/New_York

The above exception was the direct cause of the following exception:
  File "file1.py", line 59, in graph
    dt_all = pd.date_range(start=d,end=b,freq='30min')
  File "C:\Program Files\Python37\Lib\site-packages\pandas\core\indexes\datetimes.py", line 1105, in date_range
    **kwargs,
  File "C:\Program Files\Python37\Lib\site-packages\pandas\core\arrays\datetimes.py", line 419, in _generate_range
    tz = _infer_tz_from_endpoints(start, end, tz)
    ) from err
TypeError: Start and end cannot both be tz-aware with different timezones

提前感谢您的帮助

python-3.x pandas 日期时间 时区

评论

0赞 FObersteiner 8/18/2023
调用 时,start 和 end 必须具有相同的时区(或 UTC 偏移量,或无)。这就是错误告诉你的。它似乎包含混合时区。在生成date_range之前,您必须先对其进行清理。如果您需要更多帮助,请添加一个示例的内容。pd.date_rangedf_y['Datetime']df_y['Datetime']
0赞 Almodius 8/18/2023
谢谢你的回答。我明白你的意思了。随机工作/失败的任何原因?只有当我运行 cron.py 并且重新启动电脑后,它才失败,再次正常。我的假设有意义吗?在 [4] 中: dt_all[-1] Out[4]: Timestamp('2023-08-17 16:00:00-0400', tz='America/New_York', freq='30T') 在 [6]: df_y.index[-1] Out[6]: Timestamp('2023-08-17 16:00:00-0400', tz='pytz.固定偏移量(-240)')
0赞 FObersteiner 8/18/2023
我只能在这里提供一些一般提示,因为我不知道您的环境的细节。为了避免 Python 的日期时间出现问题,您可以尝试始终如一地使用 UTC。例如,在 pandas 中解析日期时间时,可以使用 utc=True; 在您的示例中。df_y['Datetime'] = pd.to_datetime(df_y['Datetime'], utc=True)
0赞 Almodius 8/18/2023
发现从yfinance下载时问题的根源 时间戳是 Timestamp('2023-06-20 09:30:00-0400', tz='America/New_York') 但在 df 保存为 csv 文件并再次加载后 df_y = pd.read_csv(“Meta.csv”) df_y['Datetime'] = pd.to_datetime(df_y['Datetime']) df_y.set_index('Datetime',inplace=True) 设置为 Timestamp('2023-06-09 13:30:00-0400', tz='pytz。FixedOffset(-240)'),所以我转换为 df_y1.index = df_y1.index.tz_convert('America/New_York') pd.to_datetime(df[))时有没有转换的方法?pd.to_datetime(df['date'].tz_convert()) 不起作用
0赞 FObersteiner 8/19/2023
你试过使用UTC吗?在许多情况下,这是一个安全的选择,因为您可以明确地将日期时间 + UTC 偏移量日期时间 + 时区转换为它。

答: 暂无答案