【问题标题】:tz_localize: KeyError: ('Asia/Singapore', u'occurred at index 0')tz_localize: KeyError: ('Asia/Singapore', u'occurrred at index 0')
【发布时间】:2019-02-28 02:18:21
【问题描述】:

参考:Python pandas convert unix timestamp with timezone into datetime

搜索了这个主题,但仍然找不到答案。

我有一个格式如下的数据框:

df timestamp
1  1549914000 
2  1549913400  
3  1549935000 
3  1549936800     
5  1549936200  

我使用以下方法将纪元转换为日期:

df['date'] = pd.to_datetime(df['timestamp'], unit='s')

这条线将产生一个总是比我的当地时间晚 8 小时的日期。

所以我按照链接中的示例使用 apply + tz.localize to Asia/Singapore,我在上面代码之后的下一行尝试了下面的代码。

df['date'] = df.apply(lambda x: x['date'].tz_localize(x['Asia/Singapore']), axis=1)

但是python返回错误如下:

Traceback (most recent call last):
  File "/home/test/script.py", line 479, in <module>
    schedule.every(10).minutes.do(main).run()
  File "/opt/cloudera/parcels/Anaconda-4.0.0/lib/python2.7/site-packages/schedule/__init__.py", line 411, in run
    ret = self.job_func()
  File "/home/test/script.py", line 361, in main
    df['date'] = df.apply(localize_ts, axis = 1)
  File "/opt/cloudera/parcels/Anaconda-4.0.0/lib/python2.7/site-packages/pandas/core/frame.py", line 4877, in apply
    ignore_failures=ignore_failures)
  File "/opt/cloudera/parcels/Anaconda-4.0.0/lib/python2.7/site-packages/pandas/core/frame.py", line 4973, in _apply_standard
    results[i] = func(v)
  File "/home/test/script.py", line 359, in localize_ts
    return pd.to_datetime(row['date']).tz_localize(row['Asia/Singapore'])
  File "/opt/cloudera/parcels/Anaconda-4.0.0/lib/python2.7/site-packages/pandas/core/series.py", line 623, in __getitem__
    result = self.index.get_value(self, key)
  File "/opt/cloudera/parcels/Anaconda-4.0.0/lib/python2.7/site-packages/pandas/core/indexes/base.py", line 2574, in get_value
    raise e1
KeyError: ('Asia/Singapore', u'occurred at index 0')

我是否正确替换了 .tz_localize(x['tz']) ?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    正如所写,您的代码正在寻找名为Asia/Singapore 的列。试试这个:

    df['date'] = df['date'].dt.tz_localize('Asia/Singapore')
    

    【讨论】:

      【解决方案2】:

      你可以试试

      import numpy as np
      import pandas as pd
      df = pd.DataFrame({'timestamp': [1549952400, 1549953600]},index=['1', '2'])
      df['timestamp2'] =  df['timestamp'] + 28800
      df['date'] = pd.to_datetime(df['timestamp2'], unit='s')
      df = df.drop('timestamp2', 1)
      

      【讨论】:

        猜你喜欢
        • 2023-03-11
        • 1970-01-01
        • 2023-02-23
        • 2019-08-31
        • 1970-01-01
        • 2022-11-18
        • 1970-01-01
        • 1970-01-01
        • 2021-08-14
        相关资源
        最近更新 更多