【问题标题】:Pd.to_datetime returns an object, not a time seriesPd.to_datetime 返回一个对象,而不是时间序列
【发布时间】:2020-02-08 03:04:53
【问题描述】:

我正在尝试将 df 中的列转换为时间序列。数据集从 2015 年 3 月 23 日到 2019 年 8 月 17 日,数据集如下所示:

                        time    1day_active_users
0  2015-03-23 00:00:00-04:00              19687.0
1  2015-03-24 00:00:00-04:00              19437.0

我正在尝试将时间列转换为日期时间序列,但它会将列作为对象返回。代码如下:

data = pd.read_csv(data_path)
data.set_index('time', inplace=True)
data.index= pd.to_datetime(data.index)
data.index.dtype 

data.index.dtype 返回 dtype('O')。我认为这就是为什么当我尝试及时索引一个元素时,它会返回一个错误。例如,当我运行这个时:

data.loc['2015']

它给了我这个错误

KeyError: '2015'

任何帮助或反馈将不胜感激。谢谢。

【问题讨论】:

  • 我无法复制您的错误。你用的是什么版本的熊猫?
  • 您正在将索引更改为日期时间,但您正尝试按一年索引。是这个问题吗?
  • 我的熊猫版本是 0.24.2。是的,问题是我试图按年份或任何日期编制索引。我尝试索引的任何方法都不起作用。
  • 谢谢,我照做了。
  • 问题是因为该列包含不同的时区。

标签: python pandas datetime timezone


【解决方案1】:

正如评论,问题可能是由于不同的时区。尝试将utc=True 传递给pd.to_datetime

df['time'] = pd.to_datetime(df['time'],utc=True)
df['time']

测试数据

                        time  1day_active_users
0  2015-03-23 00:00:00-04:00            19687.0
1  2015-03-24 00:00:00-05:00            19437.0

输出:

0   2015-03-23 04:00:00+00:00
1   2015-03-24 05:00:00+00:00
Name: time, dtype: datetime64[ns, UTC]

然后:

df.set_index('time', inplace=True)
df.loc['2015']

给予

                           1day_active_users
time                                        
2015-03-23 04:00:00+00:00            19687.0
2015-03-24 05:00:00+00:00            19437.0

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 2013-12-29
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多