我有这种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
答案 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'>
regex
或df.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
。)