属性错误:'DataFrame'对象没有'to_datetime'属性。

15

我想将pandas数据框中“Time”列中的所有项目从UTC转换为东部时间。然而,按照this stackoverflow帖子中的答案,有些关键字在pandas 0.20.3中是未知的。总体而言,我应该如何完成这个任务?

tweets_df = pd.read_csv('valid_tweets.csv')

tweets_df['Time'] = tweets_df.to_datetime(tweets_df['Time'])
tweets_df.set_index('Time', drop=False, inplace=True)

错误是:
tweets_df['Time'] = tweets_df.to_datetime(tweets_df['Time'])
  File "/scratch/sjn/anaconda/lib/python3.6/site-packages/pandas/core/generic.py", line 3081, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'to_datetime'

时间列中的项目看起来像这样:

2016-10-20 03:43:11+00:00

更新:使用中

tweets_df['Time'] = pd.to_datetime(tweets_df['Time'])
tweets_df.set_index('Time', drop=False, inplace=True)
tweets_df.index = tweets_df.index.tz_localize('UTC').tz_convert('US/Eastern') 

没有进行时间转换。有什么问题可以修复的吗?

更新2:因此,以下代码不会进行就地转换,这意味着当我使用iterrows()打印row['Time']时,它会显示原始值。您知道如何进行原地转换吗?

tweets_df['Time'] = pd.to_datetime(tweets_df['Time'])
for index, row in tweets_df.iterrows():
    row['Time'].tz_localize('UTC').tz_convert('US/Eastern')

for index, row in tweets_df.iterrows():
    print(row['Time'])

3
pandas.to_datetime()将传入的日期时间解析为datetime类型,并返回一个相同长度的Series或DataFrame对象。它还可以用于转换非标准日期时间字符串(如持续时间和文本)为datetime对象。该函数支持多种日期时间格式,包括通过format参数指定的自定义日期时间格式。 - Alex
7
这句话的意思是:“pandas.to_datetime 不是 DataFrame 的一个方法。” - Alex
2个回答

44

to_datetime 是 Pandas 中的一个函数,而不是 DataFrame 的方法。请尝试:

tweets_df['Time'] = pd.to_datetime(tweets_df['Time'])

所以 tweets_df['Time'] = pd.to_datetime(tweets_df['Time']) tweets_df.set_index('Time', drop=False, inplace=True) tweets_df.index = tweets_df.index.tz_localize('UTC').tz_convert('US/Eastern') 并没有进行时间转换。缺少了什么? - Mona Jalal
pd.to_datetime(['2016-10-20 03:43:11+00:00']).tz_localize('UTC').tz_convert('US/Eastern') 对我来说可行...在将其设置为索引之前尝试进行转换。 - Alex
所以不知何故,这似乎并没有像在打印转换时看到的那样进行原地转换,但是当我通过iterrows打印row['Time']进行转换后,没有显示任何转换内容。您知道如何进行原地转换吗?row['Time'].tz_localize('UTC').tz_convert('US/Eastern') - Mona Jalal
@MonaJalal 看起来您转换了索引但没有转换列。 - Alex
1
@MonaJalal 你可能需要提出一个新问题,因为范围已经改变了...这样你会得到更多人的关注,而且这篇文章也不会误导那些有类似问题的人。 - Alex
显示剩余2条评论

0

to_datetime 是一个通用函数,没有等效的 DataFrame 方法。话虽如此,您可以在单列数据框上使用 apply 调用它。

tweets_df['Time'] = tweets_df[['Time']].apply(pd.to_datetime)

apply 特别适用于需要将多个列转换为 datetime64 的情况。

也可以在列上应用它,但这并不是真正可取的,因为现在它变成了对列的循环,对于大型框架来说速度非常慢。

tweets_df['Time'] = tweets_df['Time'].apply(pd.to_datetime)
#                            ^      ^  <--- single brackets

提示:传递format=参数可以使转换速度快得多。请参阅this post以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接