Как преобразовать (число со знаком%) в (округление (число) со знаком%) - PullRequest
0 голосов
/ 22 ноября 2018

df выглядит следующим образом:

    col1        col2
    10.56%      a
    55.78%      b
    700%        c
    118.13%     d
    200%        e
    102%        f
    45.25%      g
    67.765%     h

Я хочу, чтобы df ['col1'], как показано ниже (округлено до 0 после знака «%»):

col1
11%
56%
700%
118%
200%
102%
45%
68%

Мой код не работает должным образом для некоторыхзаписи

df['col1'] = [re.sub("%","",str(x)) for x in list(df['col1'])]
df['col1'] = df['col1'].map(lambda x: pd.to_numeric(x, errors='ignore'))
df = df.round({'col1': 0})
df['col1'] = [re.sub(".0","%",str(x)) for x in list(df['col1'])]

Например, 700% изменяется на 7%

118,13 до %%

, некоторые на% 6%

, а для некоторых записей этоработает нормально.

Пожалуйста, помогите мне с этим !!!

Ответы [ 4 ]

0 голосов
/ 22 ноября 2018

Я бы определил функцию, чтобы я мог зациклить ее с apply ():

def change(row, col):
    target = row[col]
    number = float(target.replace("%",""))
    number = round(number,0)
    return "{}%".format(int(number))

df["col1"] = df.apply(change, col = "col1", axis = 1)
0 голосов
/ 22 ноября 2018

В одну сторону:

import pandas as pd

df = pd.DataFrame({'a': [1, 2, 3], 'b': ['10.2%', '5.3%', '79.6%']})

df['b'] = df['b'].str.strip('%').astype(float).round(0).astype(int).astype(str) + '%'
0 голосов
/ 22 ноября 2018

Быстрый и грязный путь:

import pandas as pd

perc_df = pd.DataFrame(
    {'col1' : ['65.94%', '761.19%', '17281.0191%', '9.4%', '14%'],
     'col2' : ['a', 'b', 'c', 'd', 'e']
})


perc_df['col1'] = pd.to_numeric(perc_df['col1'].str.replace('%', ''))
perc_df['col1'] = pd.Series([round(val, 2) for val in perc_df['col1']], index = perc_df.index)
perc_df['col1'] = pd.Series(["{0:.0f}%".format(val) for val in perc_df['col1']], index = perc_df.index)
0 голосов
/ 22 ноября 2018

Вы можете использовать to_numeric после strip '%'

pd.to_numeric(df.col1.str.strip('%')).round(0).astype(int).astype(str)+'%'
0     11%
1     56%
2    700%
3    118%
4    200%
5    102%
6     45%
7     68%
Name: col1, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...