从列中提取国家名称和年份并在数据框中创建新列

社会演员多 python 231

原文标题Extracting Country name and year from column and create a new columns in dataframe

在以下情况下:

Source Value
sx_India-2021 23
dfr_Australia-1987 21
df_fg-Africa-2022 34

我使用了“str.split”,但它不适用于所有记录。我需要一个单独的列——“来源”中的“国家”和“年份”。

原文链接:https://stackoverflow.com//questions/71599972/extracting-country-name-and-year-from-column-and-create-a-new-columns-in-datafra

回复

我来回复
  • mozway的头像
    mozway 评论

    IIUC,你可以用str.extract

    df['Source'].str.extract(r'([^-_]+)-\d+$', expand=False)
    

    输出:

    0        India
    1    Australia
    2       Africa
    Name: Source, dtype: object
    

    国家和年份:

    df[['Country', 'Year']] = df['Source'].str.extract('([^-_]+)-(\d+)$')
    

    输出:

                   Source  Value    Country  Year
    0       sx_India-2021     23      India  2021
    1  dfr_Australia-1987     21  Australia  1987
    2   df_fg-Africa-2022     34     Africa  2022
    
    2年前 0条评论
  • Corralien的头像
    Corralien 评论

    更新

    df[['Country', 'Year']] = pd.DataFrame(df['Source'].str.split(r'[_-]').str[-2:].tolist())
    print(df)
    
    # Output
                   Source  Value    Country  Year
    0       sx_India-2021     23      India  2021
    1  dfr_Australia-1987     21  Australia  1987
    2   df_fg-Africa-2022     34     Africa  2022
    

    采用:

    pat = r'[_-](?P<Country>[^-]*)-(?P<Year>\d{4})'
    df = pd.concat([df, df['Source'].str.extract(pat)], axis=1)
    print(df)
    
    # Output
                   Source  Value    Country  Year
    0       sx_India-2021     23      India  2021
    1  dfr_Australia-1987     21  Australia  1987
    2   df_fg-Africa-2022     34     Africa  2022
    

    如果不需要Source列,使用:

    df = pd.concat([df.pop('Source').str.extract(pat), df], axis=1)
    print(df)
    
    # Output
         Country  Year  Value
    0      India  2021     23
    1  Australia  1987     21
    2     Africa  2022     34
    
    2年前 0条评论