将字符串转换为datetime-python数据帧
您好,我想将数据框列(字符串)转换为日期。我发现它正确地转换了一些日期,但有些日期是错误的将字符串转换为datetime-python数据帧,python,datetime,Python,Datetime,您好,我想将数据框列(字符串)转换为日期。我发现它正确地转换了一些日期,但有些日期是错误的 df Id Date Rev 1605380 1/12/2018 3000.0 2237851 27/11/2018 3000.0 1797180 11/2/2018 2000.0 1156126 9/1/2018 2000.0 1205792 8/4/2017 2000.0 df['Date']=pd.to_datetime(df['Date']) 我得到
df
Id Date Rev
1605380 1/12/2018 3000.0
2237851 27/11/2018 3000.0
1797180 11/2/2018 2000.0
1156126 9/1/2018 2000.0
1205792 8/4/2017 2000.0
df['Date']=pd.to_datetime(df['Date'])
我得到的输出
Id Date Rev
1605380 2018-01-12 3000.0
2237851 2018-11-27 3000.0
1797180 2018-11-02 2000.0
1156126 2018-09-01 2000.0
1205792 2017-08-04 2000.0
似乎如果“天”不是两位数,datetime将其转换为“月”,而不是“天”。因此,2018年1月12日应该是2018-12-01,而不是2018-01-12。
如何解决此问题
我实际上只需要每年和每月的输出
理想输出
Id Date Rev
1605380 2018-12 3000.0
2237851 2018-11 3000.0
1797180 2018-02 2000.0
1156126 2018-01 2000.0
1205792 2017-04 2000.0
您只需将
format
参数指定为'%d/%m/%Y'
,以明确说明注释的日期格式。或者将dayfirst
设置为True
。datetime对象实际上包含年、月、日和时间的信息,因此要仅显示月和年,必须将其转换回字符串:
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True).dt.strftime('%Y-%m')
您可以在
to_datetime
函数中使用format
对日期的确切语法进行编码:这里是format=“%d/%m/%Y”
,之后您可以将datetime对象转换为任何字符串,参见此处。请注意,pandas
试图提供帮助,并将您的日期和时间字符串解释为m/d/Y
,但不能解释的情况除外,并且尝试了类似于d/m/Y
(如2018年11月27日)的替代方案@Ascurion的建议是正确的,因为在您的情况下,它应该始终是“%m/%d/%Y”。您好,谢谢您的回复。它仍然将“天”提取为月,而不是将“月”提取为非两位数的天。例如,2018年1月12日变成2018-01年,但应该是2018-12年,这很奇怪。对我有用。dayfirst=True
和format='%d/%m/%Y
都是这样吗?