Как заменить определенный символ, который встречается между 2 символами? - PullRequest
1 голос
/ 14 июня 2019

У меня есть серия панд со следующими значениями:

import pandas as pd
input_series = pd.Series(['9009.00', '909.99', '9999.00', '9000.00', '900900900.00', '9900.09'])

Я хочу создать серию, которая выглядит следующим образом:

ОЖИДАЕМЫЙ СЕРИИ

9999.00
999.99
9999.00
9000.00
999999900.00
9999.99

Задача состоит в том, чтобы заменить все нули (0), которые встречаются между двумя девятками (9). Я пытался использовать str.replace Утилита панд, но безуспешно.

Ответы [ 2 ]

3 голосов
/ 14 июня 2019

Используйте пользовательскую функцию с поиском сначала 9 на find и последним 9 на rfind и заменой только следующих подстрок:

input_series = pd.Series(['9009.00', '909.99', '9999.00', '9000.00',
                          '900900900.00', '9900.09'])

def rep(x):
    r = x[x.find('9'):x.rfind('9')+1]
    return x.replace(r, r.replace('0','9'))

input_series = input_series.apply(rep)
print (input_series)
0         9999.00
1          999.99
2         9999.00
3         9000.00
4    999999900.00
5         9999.99
dtype: object
3 голосов
/ 14 июня 2019
>>> input_series = pd.Series(['9009.00', '909.99', '9999.00', '9000.00', '900900900.00'])
>>> 
>>> df = pd.DataFrame()
>>> df['input'] = input_series
>>> df['extract'] = df['input'].str.extract('(9[09]+9)').fillna('')
>>> df['out'] = df.apply(lambda x: x['input'].replace(x['extract'], x['extract'].replace('0', '9')), axis=1)
>>> df
          input  extract           out
0       9009.00     9009       9999.00
1        909.99      909        999.99
2       9999.00     9999       9999.00
3       9000.00                9000.00
4  900900900.00  9009009  999999900.00

PS

Для нового добавленного случая, то есть от '9900.09' до '9999.99'

Обновите регулярное выражение до (9 [09.] +9)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...