Настраиваемое преобразование «%» и «>» в ​​числовых выражениях в строковых столбцах по всему фрейму данных - PullRequest
0 голосов
/ 23 мая 2018

У меня есть несколько столбцов с «%» и «>», и я хочу избавиться от этого и превратить столбцы в числа.Вот как это выглядит:

+----+-------------+--------+
|    | xRelegation | xChamp |
+----+-------------+--------+
| 11 | 12%         | <1%    |
| 12 | 20%         | <1%    |
| 13 | 27%         | <1%    |
| 14 | 85%         | <1%    |
| 15 | 91%         | <1%    |
+----+-------------+--------+

Итак, я попытался создать эту функцию, чтобы использовать все столбцы, содержащие эти символы:

def get_prob(row):
    for i in df[row]:
        prob = 0
        i = i.replace('%','')
        if i == '<1':
            prob = 0.001
        elif i == '>99':
            prob = 99.99
        else:
            prob = pd.to_numeric(i)/100
    return prob

Однако я попытался вычислить это:

df.apply(get_prob("xChamp"), axis=1)

Не сработало.

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Я думаю, что ваша функция get_prob не нуждается в цикле для, например:

def get_prob(row):
    if row == '<1%':
        return 0.001
    elif row == '>99%':
        return 99.99
    else:
        return pd.to_numeric(row.replace('%',''))/100

Тогда, если вы хотите изменить свой столбец, вы используете apply, например:

df['xRelegation'] = df['xRelegation'].apply(get_prob)

И то же самое для другого столбца.

0 голосов
/ 23 мая 2018

используйте df.replace ():

df.replace({'%':'','\<1':'0.001','\>99':'99.99'}, regex=True).astype(float)/100
0 голосов
/ 23 мая 2018

Вам не нужно зацикливаться.Для df, как показано ниже:

  xChamp    xRelegation
0   <1%       12%
1   <1%       20%

Код с помощью регулярных выражений вы можете удалить символы, которые вы хотите удалить из df,

import re
df = df.applymap(lambda x: re.sub('[<%$]', '', x)).astype(float)/100
df['xChamp'] = df['xChamp'].replace(dict(zip([0.01, 0.99],[0.001, 99.99])))
print(df)

Дает:

    xChamp  xRelegation
0   0.001   0.12
1   0.001   0.20
2   99.99   0.20

Посмотрите документы для получения дополнительной информации.

...