Я хочу удалить * из значений, содержащих * в конце скажем 20 *, 30 * из столбца - PullRequest
0 голосов
/ 19 октября 2018

У меня есть фрейм данных, содержащий значения в столбцах:

df = pd.DataFrame({
    'A': ['20*', 40, '30*' ],
    'B': ['abc', 'bar', 'xyz'],
})

Я хочу удалить * в столбце A, результат должен быть: ['20', 40, '30' ]

Как этого достичь?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Используя регулярное выражение, это работает:

import pandas as pd

df = pd.DataFrame({'A': ['20*', 40, '30*' ], 'B': ['abc', 'bar', 'xyz']})
df.replace({'A': {r'(\d+)\*': r'\1'}}, regex=True, inplace=True)

print(df)

Скобки (\d+) представляют собой группу захвата содержащуюся \d+ проверку строк, которые состоят из одной цифрыили больше.\1 - это обратная ссылка , которая обращается к первой группе захвата, определенной ранее в квадратных скобках.

Первое регулярное выражение в основном гласит: Найти все строки, которые состоят как минимум из одной цифры сзавершающий * (в регулярном выражении экранируется как \*, поскольку один * соответствует нулю или более предыдущего символа).

Второй означает: использовать ранее захваченные цифры и вставить их,Вы можете изменить второе регулярное выражение на что-то вроде r'A\1B, чтобы лучше понять, что это значит.

0 голосов
/ 19 октября 2018

Используя str.rstrip с fillna, обратите внимание, что ваши столбцы A - это объект, который содержит как строку, так и int, поэтому str.rstrip вернет NaN в ячейке int, тогда нам просто нужно использовать fillna ее заполнить

df.A=df.A.str.rstrip('*').fillna(df.A)
...