【问题标题】:how to convert a string type to date format如何将字符串类型转换为日期格式
【发布时间】:2015-10-26 09:49:06
【问题描述】:

我的源数据有一列包含日期信息,但它是字符串类型。 典型的线条是这样的:

04 13, 2013
07 1, 2012 

我正在尝试转换为日期格式,所以我使用了 panda 的 to_datetime 函数:

df['ReviewDate_formated'] = pd.to_datetime(df['ReviewDate'],format='%mm%d, %yyyy')

但我收到此错误消息:

ValueError: time data '04 13, 2013' does not match format '%mm%d, %yyyy' (match)

我的问题是:

  1. 如何转换为日期格式?

  2. 我还想提取到月、年和日列,因为我需要进行一些月间比较?但是这里的问题是字符串的长度不同。

【问题讨论】:

  • 尝试%m 而不是%mm(参见link)。您还错过了月份和日期之间的空格,年份是%Y。这不是 Excel ;)
  • 你的第二个问题很不清楚,很可能没有答案。你应该重写它。

标签: python date pandas


【解决方案1】:

您的格式字符串不正确,您想要'%m %d, %Y',有一个reference 显示有效格式标识符是什么:

In [30]:
import io
import pandas as pd
t="""ReviewDate
04 13, 2013
07 1, 2012"""
df = pd.read_csv(io.StringIO(t), sep=';')
df

Out[30]:
    ReviewDate
0  04 13, 2013
1   07 1, 2012

In [31]:    
pd.to_datetime(df['ReviewDate'], format='%m %d, %Y')

Out[31]:
0   2013-04-13
1   2012-07-01
Name: ReviewDate, dtype: datetime64[ns]

要回答第二部分,一旦 dtype 是 datetime64,那么您可以调用矢量化的 dt 访问器方法来获取 daymonthyear 部分:

In [33]:
df['Date'] = pd.to_datetime(df['ReviewDate'], format='%m %d, %Y')
df['day'],df['month'],df['year'] = df['Date'].dt.day, df['Date'].dt.month, df['Date'].dt.year
df

Out[33]:
    ReviewDate       Date  day  month  year
0  04 13, 2013 2013-04-13   13      4  2013
1   07 1, 2012 2012-07-01    1      7  2012

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2013-12-28
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多