【问题标题】:How to convert the list to the year如何将列表转换为年份
【发布时间】:2020-06-23 18:22:39
【问题描述】:

我有以下数据框:

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

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

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

有没有办法让一年变成 2019、2018 格式。

【问题讨论】:

  • 您希望年份总是在 2000 年之后开始吗?
  • 等等,第二列存储的是什么:数字列表、字符串列表还是字符串?
  • @CaptainLevi 是在 2000 年之后开始的。我想只保留一年而不是列表。有没有更好的方法不以列表格式存储。

标签: python regex pandas dataframe


【解决方案1】:

假设您的所有年份都在 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

【讨论】:

  • 我试图从名称中解析年份。是的,它总是从 20 开始。我只想保留年份而不是列表。
  • 逗号分隔多年? @gannu
  • 是的,这就是我想要的。
  • @gannu 我已经更新了我的答案,将其存储为字符串而不是列表。
【解决方案2】:

在 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 2019-07-20
    • 2020-05-25
    相关资源
    最近更新 更多