gpt4 book ai didi

python - Pandas 中的 `re.sub()`

转载 作者:太空狗 更新时间:2023-10-30 01:04:55 25 4
gpt4 key购买 nike

假设我有:

s = 'white male, 2 white females'

并希望将其“扩展”为:

'white male, white female, white female'

更完整的案例列表是:

  • '两个西类牙裔男性,两个西类牙裔女性'
    • --> '西类牙裔男性,西类牙裔男性,西类牙裔女性,西类牙裔女性'
  • '2 个黑人男性,一个白人男性'
    • --> '黑人男性,黑人男性,白人男性'

看起来我很接近:

import re

# Do I need boundaries here?
mult = re.compile('two|2 (?P<race>[a-z]+) (?P<gender>(?:fe)?male)s')

# This works:
s = 'white male, 2 white females'
mult.sub(r'\g<race> \g<gender>, \g<race> \g<gender>', s)
# 'white male, white female, white female'

# This fails:
s = 'two hispanic males, 2 hispanic females'
mult.sub(r'\g<race> \g<gender>, \g<race> \g<gender>', s)
# ' , , hispanic males, hispanic female, hispanic female,'

是什么造成了第二种情况的错误?

奖励问题:是否有一种 pandas 系列的方法可以直接实现此功能,而不是使用 Series.apply()?很抱歉修改我的问题并在这里浪费任何人的时间。

例如,在:

s = pd.Series(
['white male',
'white male, white female',
'hispanic male, 2 hispanic females',
'black male, 2 white females'])

是否有比以下路线更快的路线:

s.apply(lambda x: mult.sub(..., x))

最佳答案

关于您的“奖金”问题,您可以使用 pandas.Series.str.replace,它是 pandas.Series.str methods 的一部分与正则表达式一起使用:

In [10]: import re

In [11]: import pandas as pd

In [12]: s = pd.Series(
...: ['white male',
...: 'white male, white female',
...: 'hispanic male, 2 hispanic females',
...: 'black male, 2 white females'])

In [13]: mult = re.compile('two|2 (?P<race>[a-z]+) (?P<gender>(?:fe)?male)s')
...:

In [14]: s.str.replace(mult, r'\g<race> \g<gender>, \g<race> \g<gender>')
Out[14]:
0 white male
1 white male, white female
2 hispanic male, hispanic female, hispanic female
3 black male, white female, white female
dtype: object

我不知道这些方法是否比 .apply 快得多。我怀疑您永远不会非常快速地使用 object dtypes。

注意,如果找到this issue关于这些方法是在缓慢的一面。我想,除非他们决定编写一个 Cythonized 实现是值得的,否则您可能不会抱太大希望。

关于python - Pandas 中的 `re.sub()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48348095/

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