用python / pandas转换月,日,年,月,年?

时间:2016-11-22 14:22:09

标签: python date datetime pandas

我有这种9000行的字符串列表,每行是月/日/年:

10/30/2009
12/19/2009
4/13/2009
8/18/2007
7/17/2008
6/16/2009
1/14/2009
12/18/2007
9/14/2009
2/13/2006
3/25/2009
2/23/2007

我想要转换它,并且只有月份/年份的列表,如果它可以作为dateformat,像这样:

10/2009
12/2009
4/2009
8/2007
7/2008
6/2009
1/2009
12/2007
9/2009
2/2006
3/2009
2/2007

3 个答案:

答案 0 :(得分:3)

我认为您可以先使用to_datetime再使用to_period

df.col = pd.to_datetime(df.col).dt.to_period('m')
print (df)
       col
0  2009-10
1  2009-12
2  2009-04
3  2007-08
4  2008-07
5  2009-06
6  2009-01
7  2007-12
8  2009-09
9  2006-02
10 2009-03
11 2007-02

print (type(df.loc[0,'col']))
<class 'pandas._period.Period'>

strftime

df.col = pd.to_datetime(df.col).dt.strftime('%m/%Y')
print (df)
        col
0   10/2009
1   12/2009
2   04/2009
3   08/2007
4   07/2008
5   06/2009
6   01/2009
7   12/2007
8   09/2009
9   02/2006
10  03/2009
11  02/2007

print (type(df.loc[0,'col']))
<class 'str'>

regexdf.col = df.col.str.replace('/.+/','/') print (df) col 0 10/2009 1 12/2009 2 4/2009 3 8/2007 4 7/2008 5 6/2009 6 1/2009 7 12/2007 8 9/2009 9 2/2006 10 3/2009 11 2/2007 print (type(df.loc[0,'col'])) <class 'str'>

{{1}}

答案 1 :(得分:1)

您可以使用str.split来构建字符串:

In [32]:
df['date'] =df['date'].str.split('/').str[0] + '/'  + df['date'].str.split('/').str[-1]
df

Out[32]:
       date
0   10/2009
1   12/2009
2    4/2009
3    8/2007
4    7/2008
5    6/2009
6    1/2009
7   12/2007
8    9/2009
9    2/2006
10   3/2009
11   2/2007

答案 2 :(得分:1)

或者你可以使用正则表达式,如果你喜欢这种解决方案。这可以解决您的问题:

import re

res = re.sub(r"/\d\d?/", "/", s)

(请注意,s是日期字符串,可以是单独的日期字符串,也可以是包含所有日期的长字符串,并且您的结果绑定到res。)