gpt4 book ai didi

python - 使用 pd.series.str.extractall 与 re.findall 从 Pandas DataFrame 中的列中提取数字

转载 作者:行者123 更新时间:2023-12-01 09:29:19 26 4
gpt4 key购买 nike

我在 pandas df 中有以下列:

| Primary_key |
|-------------|
| LIT1-1.10_t |
| LIT1-1.20_t |
| LIT1-1.30_t |
| LIT4-1.99_t |
| LIT4-1.88_t |
| LIT4-1.77_t |

我想从“Primary_key”(字符串)中提取版本号;将其拆分为 version_number 和 ID,并将它们放入新列中以获得以下输出:

| Primary_key  | version_nr | ID |
|--------------|------------|----|
| LIT1-1.10_t | 1 |10 |
| LIT1-1.20_t | 1 |20 |
| LIT1-1.30_t | 1 |30 |
| LIT4-1.999_t | 4 |999 |
| LIT4-1.888_t | 4 |888 |
| LIT4-1.777_t | 4 |777 |

我认为pandas.Series.str.extractall可能是我的任务的解决方案,但我在正确应用时遇到问题。我试过df['ID'] = df['Primary_Key'].str.extractall(r'(\d{3})').unstack().apply(','.join, 1) 将所有数字提取到一列(“ID”)中,以便在下一步中将它们分开。但使用这段代码我只能得到最后三个数字:

| Primary_key  | ID |
|--------------|----|
| LIT1-1.10_t |Nan |
| LIT1-1.20_t |Nan |
| LIT1-1.30_t |Nan |
| LIT4-1.999_t |999 |
| LIT4-1.888_t |888 |
| LIT4-1.777_t |777 |

希望其中一位经验丰富的程序员知道如何解决这个问题:)

PS:我也尝试过正则表达式 re.findall('\d+',...) 但我认为它不完全是蜜蜂的膝盖。

最佳答案

是的,带有命名捕获组的 str.extract 应该可以做到这一点。

v = df.Primary_key.str.extract(r'(?P<version_nr>\d+).(?P<ID>\d+)_', expand=True)

更新df

df = pd.concat([df, v], axis=1)

df
Primary_key version_nr ID
0 LIT1-1.10_t 1 10
1 LIT1-1.20_t 1 20
2 LIT1-1.30_t 1 30
3 LIT4-1.99_t 1 99
4 LIT4-1.88_t 1 88
5 LIT4-1.77_t 1 77

关于python - 使用 pd.series.str.extractall 与 re.findall 从 Pandas DataFrame 中的列中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com