Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将字符串类型转换为日期格式_Python_Date_Pandas - Fatal编程技术网

Python 如何将字符串类型转换为日期格式

Python 如何将字符串类型转换为日期格式,python,date,pandas,Python,Date,Pandas,我的源数据有一列包含日期信息,但它是字符串类型。 典型的线路如下所示: 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 f

我的源数据有一列包含日期信息,但它是字符串类型。 典型的线路如下所示:

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)
我的问题是:

如何转换为日期格式

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


您的格式字符串不正确,您需要“%m%d,%Y”,有一个显示有效格式标识符的:

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]
为了回答第二部分的问题,一旦数据类型是datetime64,您就可以调用向量化的dt访问器方法来获取日期、月份和年份部分:

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

请尝试%m而不是%mm。请参见此。您还遗漏了月与日之间的空格,年为%Y。这不是Excel;你的第二个问题很不清楚,很可能得不到回答。你应该重写它。