如何将清单转换成年份

时间:2020-06-23 18:22:39

标签: python regex pandas dataframe

我有以下数据框:

// Switch tinting

Toggle(isOn: $order.notifyWhenReady) {
    Text("Send notification when ready")
}
.toggleStyle(SwitchToggleStyle(tint: .accentColor))

我使用正则表达式来获取年份。

Name                  Year 
DC_FY19.csv            [19]
NC_FY18.csv            [18]
AK_FY18_of_19.csv      [18,19]

有没有办法让一年成为2019年,2018年的格式。

2 个答案:

答案 0 :(得分:2)

假设所有年份都在2000年,并且还想将其保留为列表,则可以使用以下代码:

df['Year'] = df.Name.apply(lambda x: list(map(lambda x: "20"+x, re.findall('[0-9]+',x))))

Out:
                Name          Year
0        DC_FY19.csv        [2019]
1        NC_FY18.csv        [2018]
2  AK_FY18_of_19.csv  [2018, 2019]

如果要使用字符串而不是列表,请使用以下命令:

df['Year'] = df.Name.apply(lambda x: ', '.join(map(lambda x: "20"+x, re.findall('[0-9]+',x))))

Out:
                Name        Year
0        DC_FY19.csv        2019
1        NC_FY18.csv        2018
2  AK_FY18_of_19.csv  2018, 2019

答案 1 :(得分:0)

在DataFrame中存储列表通常不是一个成功的主意,但是由于您已经这样做了,因此每年只需增加2000:

df.Year.apply(lambda years: [2000+year for year in years])
#0          [2019]
#1          [2018]
#2    [2018, 2019]

如果年份是字符串,而不是数字(在您的示例中不清楚),请改为使用字符串算术:

df.Year.apply(lambda years: ["20"+year for year in years])
#0          [2019]
#1          [2018]
#2    [2018, 2019]

最后,如果有一列字符串,请使用直接替换:

df.Year.replace('(\d\d)', r'20\1', regex=True)
#0         [2019]
#1         [2018]
#2    [2018,2019]