Pandas 索引日期时间切换月份和日期
Posted
技术标签:
【中文标题】Pandas 索引日期时间切换月份和日期【英文标题】:Panda Index Datetime Switching Months and Days 【发布时间】:2018-01-24 05:05:12 【问题描述】:我有一个格式如下的熊猫 df.index。
这是一个日/月/年的字符串,所以第一项是 05Sep2017 等:
-
05/09/17 #05Sep2017
07/09/17 #07Sep2017
...
18/10/17 #18Oct2017
申请
df.index = pd.to_datetime(df.index)
到上面,将其转换为:
-
2017-05-09 #09May2017
2017-07-09 #09Jul2017
...
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 【参考方案1】:在 pandas 中默认格式为 date
s 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) 并且转换工作正常。以上是关于Pandas 索引日期时间切换月份和日期的主要内容,如果未能解决你的问题,请参考以下文章
使用 Grouper 的 pandas 系列日期时间索引中的月份名称
Python Pandas 数据框:对于一年中的每个月,如果月份不存在,则将当月最后一天的日期添加到索引中,或者删除重复项