【问题标题】:Panda Index Datetime Switching Months and DaysPandas 索引日期时间切换月份和日期
【发布时间】:2018-01-24 05:05:12
【问题描述】:

我有一个格式如下的熊猫 df.index。

这是一个日/月/年的字符串,所以第一项是 05Sep2017 等:

  1. 05/09/17 #05Sep2017
  2. 07/09/17 #07Sep2017
  3. ...
  4. 18/10/17 #18Oct2017

申请

df.index = pd.to_datetime(df.index) 

到上面,将其转换为:

  1. 2017-05-09 #09May2017
  2. 2017-07-09 #09Jul2017
  3. ...
  4. 2017-10-18 #18Oct2017

似乎正在发生的事情是第一个条目正在切换日和月。相反,最后一个条目(天大于 12)被正确转换。

我尝试通过将索引转换为列并应用来切换月份:

df['date'] = df.index
df['date'].apply(lambda x: dt.datetime.strftime(x, '%Y-%d-%m')) 

还有:

df['date'].apply(lambda x: dt.datetime.strftime(x, '%Y-%m-%d')) 

但无济于事。 如何将索引转换为日期时间,所有条目都是日/月/年?

【问题讨论】:

  • 添加 dayfirst = True

标签: pandas datetime indexing format


【解决方案1】:

在 pandas 中默认格式为 dates YY-MM-DD

df = df.set_index('date_col')
df.index = pd.to_datetime(df.index)
print (df)
            val
2017-05-09    4
2017-07-09    8
2017-10-18    2

print (df.index)
DatetimeIndex(['2017-05-09', '2017-07-09', '2017-10-18'], dtype='datetime64[ns]', freq=None)

您需要strftime,但丢失了日期时间,因为获取字符串:

df.index = pd.to_datetime(df.index).strftime('%Y-%d-%m')
print (df.index)
Index(['2017-09-05', '2017-09-07', '2017-18-10'], dtype='object')

df.index = pd.to_datetime(df.index).strftime('%d-%b-%Y')
print (df)
             val
09-May-2017    4
09-Jul-2017    8
18-Oct-2017    2

【讨论】:

  • 以上产生:'Index'对象没有属性'strftime'。
  • 可能需要先df = df.set_index('date_col')
  • 最后一行是可选的,所以使用df.index = pd.to_datetime(df.index).strftime('%Y-%d-%m') OR df.index = pd.to_datetime(df.index).strftime('%d-%b-%Y')
  • 如果我的回答对您有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。跨度>
  • 耶斯瑞尔,再次感谢。我被困在最后一行:“ValueError:month must be i in 1..12”。然后看到我们可以添加参数 df.index = pd.to_datetime(df.index, dayfirst = True) 并且转换工作正常。
猜你喜欢
  • 2016-06-26
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2014-03-07
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多