如何在python中将不同日期格式的sting转换为单日期格式?

时间:2016-04-04 19:58:19

标签: python python-3.x pandas

我的某些日期为26-07-10,其他的为4/8/2010,作为csv中的字符串类型。我希望它们采用单一格式,如4/8/2010,以便我可以解析它们并每年对它们进行分组。 python或pandas中有函数可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您可以使用parse_dates read_csv的{​​{1}}个参数来解析这些日期表格,但是对于含糊不清的表单,如果您先将第一个表格与第一天混在一起,则可能会失败:

In [7]:
t="""date
26-07-10
4/8/2010"""
df = pd.read_csv(io.StringIO(t), parse_dates=[0])
df

Out[7]:
        date
0 2010-07-26
1 2010-04-08

您可以使用dt.strftime更改字符串格式来更改显示的格式:

In [10]:
df['date'].dt.strftime('%d/%m/%Y')

Out[10]:
0    26/07/2010
1    08/04/2010
Name: date, dtype: object

实际上,尽管最好将列保持为datetime,然后您可以按年份分组:

In [11]:
t="""date,val
26-07-10,23
4/8/2010,5567"""
df = pd.read_csv(io.StringIO(t), parse_dates=[0])
df

Out[11]:
        date   val
0 2010-07-26    23
1 2010-04-08  5567

In [12]:    
df.groupby(df['date'].dt.year).mean()

Out[12]:
       val
date      
2010  2795

答案 1 :(得分:0)

您可以尝试使用@EdChum提到的parse-date pd.read_csv()参数 或者,您可以将它们标记为标准格式,如datetime.date的格式,如下所示:

import io
import datetime
t=u"""date
26-07-10
4/8/2010"""
df = pd.read_csv(io.StringIO(t), parse_dates=[0])
df.date.astype(datetime.date)
df

出:

    date
0   2010-07-26  
1   2010-04-08