如何从 Pandas 中的 YYYY-YY 格式列中提取去年 (YYYY)
How to extract the last year (YYYY) from a YYYY-YY format column in Pandas
我正在尝试以 YYYY-YY 格式提取会计日期字符串的最后一年 (YY)。例如,这个“1999-00”的最后一年是 2000 年。
当前代码似乎涵盖了除此之外的大多数情况。
import pandas as pd
import numpy as np
test_df = pd.DataFrame(data={'Season':['1996-97', '1997-98', '1998-99',
'1999-00', '2000-01', '2001-02',
'2002-03','2003-04','2004-05',
'2005-06','2006-07','2007-08',
'2008-09', '2009-10', '2010-11', '2011-12'],
'Height':np.random.randint(20, size=16),
'Weight':np.random.randint(40, size=16)})
我需要一个逻辑来包括一个情况,如果是世纪末,那么我的应用方法应该添加到前两位数字,我相信这是我唯一遗漏的情况。
当前代码如下:
test_df['Season'] = test_df['Season'].apply(lambda x: x[0:2] + x[5:7])
给你!使用以下函数代替 lambda:
def get_season(string):
century = int(string[:2])
preyear = int(string[2:4])
postyear = int(string[5:7])
if postyear < preyear:
century += 1
# zfill is so that "1" becomes "01"
return str(century).zfill(2) + str(postyear).zfill(2)
这应该也有效:
pd.to_numeric(test_df['Season'].str.split('-').str[0]) + 1
输出:
0 1997
1 1998
2 1999
3 2000
4 2001
5 2002
6 2003
7 2004
8 2005
9 2006
10 2007
11 2008
12 2009
13 2010
14 2011
15 2012
我使用 fiscalyear 模块。
import numpy as np
import pandas as pd
import fiscalyear as fy
...
test_df['Season'] = test_df['Season'].apply(lambda x : fy.FiscalYear(int(x[0:4]) + 1).fiscal_year)
print(test_df)
您可以使用.str.extract
提取前四位数字
df['Season'] = df['Season'].str.extract('^(\d{4})').astype(int).add(1)
Season Height Weight
0 1997 4 22
1 1998 18 4
2 1999 19 27
3 2000 7 10
4 2001 19 9
5 2002 18 31
6 2003 19 9
7 2004 18 29
8 2005 13 17
9 2006 13 30
10 2007 5 14
11 2008 15 3
12 2009 13 10
13 2010 15 8
14 2011 0 23
15 2012 2 38
我正在尝试以 YYYY-YY 格式提取会计日期字符串的最后一年 (YY)。例如,这个“1999-00”的最后一年是 2000 年。
当前代码似乎涵盖了除此之外的大多数情况。
import pandas as pd
import numpy as np
test_df = pd.DataFrame(data={'Season':['1996-97', '1997-98', '1998-99',
'1999-00', '2000-01', '2001-02',
'2002-03','2003-04','2004-05',
'2005-06','2006-07','2007-08',
'2008-09', '2009-10', '2010-11', '2011-12'],
'Height':np.random.randint(20, size=16),
'Weight':np.random.randint(40, size=16)})
我需要一个逻辑来包括一个情况,如果是世纪末,那么我的应用方法应该添加到前两位数字,我相信这是我唯一遗漏的情况。
当前代码如下:
test_df['Season'] = test_df['Season'].apply(lambda x: x[0:2] + x[5:7])
给你!使用以下函数代替 lambda:
def get_season(string):
century = int(string[:2])
preyear = int(string[2:4])
postyear = int(string[5:7])
if postyear < preyear:
century += 1
# zfill is so that "1" becomes "01"
return str(century).zfill(2) + str(postyear).zfill(2)
这应该也有效:
pd.to_numeric(test_df['Season'].str.split('-').str[0]) + 1
输出:
0 1997
1 1998
2 1999
3 2000
4 2001
5 2002
6 2003
7 2004
8 2005
9 2006
10 2007
11 2008
12 2009
13 2010
14 2011
15 2012
我使用 fiscalyear 模块。
import numpy as np
import pandas as pd
import fiscalyear as fy
...
test_df['Season'] = test_df['Season'].apply(lambda x : fy.FiscalYear(int(x[0:4]) + 1).fiscal_year)
print(test_df)
您可以使用.str.extract
提取前四位数字
df['Season'] = df['Season'].str.extract('^(\d{4})').astype(int).add(1)
Season Height Weight
0 1997 4 22
1 1998 18 4
2 1999 19 27
3 2000 7 10
4 2001 19 9
5 2002 18 31
6 2003 19 9
7 2004 18 29
8 2005 13 17
9 2006 13 30
10 2007 5 14
11 2008 15 3
12 2009 13 10
13 2010 15 8
14 2011 0 23
15 2012 2 38