【问题标题】:'Index' object has no attribute 'tz_localize'“索引”对象没有属性“tz_localize”
【发布时间】:2015-05-08 07:55:43
【问题描述】:

我正在尝试转换 csv 文件中时间/日期列 ('Created_At') 中的所有 'GMT' 时间实例,使其全部格式化为 'EST'。 请看下面:

import pandas as pd
from pandas.tseries.resample import TimeGrouper
from pandas.tseries.offsets import DateOffset
from pandas.tseries.index import DatetimeIndex

cambridge = pd.read_csv('\Users\cgp\Desktop\Tweets.csv')
cambridge['Created_At'] = pd.to_datetime(pd.Series(cambridge['Created_At']))
cambridge.set_index('Created_At', drop=False, inplace=True)
cambridge.index = cambridge.index.tz_localize('GMT').tz_convert('EST')
cambridge.index = cambridge.index - DateOffset(hours = 12)

我得到的错误是:

cambridge.index = cambridge.index.tz_localize('GMT').tz_convert('EST')

AttributeError: 'Index' 对象没有属性 'tz_localize'

我尝试了各种不同的方法,但对于索引对象无法识别 tz_attribute 的原因感到困惑。非常感谢您的帮助!

【问题讨论】:

  • tz_localize 不是Index 类型可用的方法,您可以在将其设置为索引之前执行转换
  • 也就是说,这是DatetimeIndex 可用的方法,所以这可能是一个错误?比较 pandas.pydata.org/pandas-docs/stable/api.html#indexpandas.pydata.org/pandas-docs/stable/…
  • 感谢埃德。我是 python 新手 - 如果这是一个错误,我将如何修复它?
  • 在尝试本地化之前,检查它是索引还是日期时间索引;向我们展示您开始使用的值的三行示例(最好采用我们可以用作 DataFrame 参数的格式);看看适合我的简化版是否适合你。

标签: python pandas


【解决方案1】:

嗯。像其他 tz_localize 当前问题一样,这对我来说很好。这对你有用吗?我从您的示例中简化了一些调用:

df2 =  pd.DataFrame(randn(3, 3), columns=['A', 'B', 'C'])
# randn(3,3) returns nine random numbers in a 3x3 array.
# the columns argument to DataFrame names the 3 columns. 
# no datetimes here! (look at df2 to check)

df2['A'] = pd.to_datetime(df2['A'])
# convert the random numbers to datetimes -- look at df2 again
# if A had values to_datetime couldn't handle, we'd clean up A first

df2.set_index('A',drop=False, inplace=True)
# and use that column as an index for the whole df2;

df2.index  = df2.index.tz_localize('GMT').tz_convert('US/Eastern')
# make it timezone-conscious in GMT and convert that to Eastern

df2.index.tzinfo
<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>

【讨论】:

  • 嗨@cphlewis,感谢您的帮助。我尝试了您提供的代码并且它有效!您介意将其评论出来,以便我可以按照您的操作进行吗?我对(randn(3, 3) 部分感到最困惑。
  • 您没有发布您的数据,所以我使用了随机值。已评论。
【解决方案2】:

替换

cambridge.set_index('Created_At', drop=False, inplace=True)

cambridge.set_index(pd.DatetimeIndex(cambridge['Created_At']), drop=False, inplace=True)

【讨论】:

  • 嗨,感谢您的帮助。当我尝试替换该行时,出现以下错误: File "C:\Python27\lib\site-packages\pandas-0.15.2-py2.7-win-amd64.egg\pandas\tseries\tools.py",第 467 行,在 parse_time_string 中引发 DateParseError(e) pandas.tseries.tools.DateParseError: unknown string format
  • @cpg25 你能附上cambridge['Created_At'] 中的数据样本吗?看起来像Fri Mar 06 09:30:56 +0000 2015吗?
  • 没有,看起来像这样:"created_at" : { "$date" : "2015-03-03T18:44:46.000-0500" } "created_at" : { "$date" : "2015-03-03T18:44:48.000-0500" } "created_at" : { "$date" : "2015-03-03T18:44:54.000-0500" }
  • 你传入的数据中有那些“created_at”字符串吗?还是字典条目?因为 pandas 可能不会自动转换它们,所以你可能需要清理它。
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 2020-09-06
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多