从列中提取国家名称和年份并在数据框中创建新列
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”,但它不适用于所有记录。我需要一个单独的列——“来源”中的“国家”和“年份”。
回复
我来回复-
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年前 -
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年前