简体   繁体   中英

how to convert sting of different date format in to single date format in python?

i have some of my date as 26-07-10 and others as 4/8/2010 as string type in a csv. i want them to be in single format like 4/8/2010 so that i can parse them and group them each year. Is there a function in python or pandas help me?

You can parse these date forms using parse_dates param of read_csv note however for ambiguous forms it may fail for instance if you gave month first forms mixed with day first:

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

You can alter the displayed format by changing the string format using 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

Really though it's better to keep the column as a datetime you can then groupby on year:

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

You can try using parse-date parameter of pd.read_csv() as mentioned by @EdChum Alternatively, you could typecast them to a standard format, like that of datetime.date as follows:

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

out:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM