Столбец данных Pandas с плавающей точкой в ​​процентном значении ошибки - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь преобразовать столбец данных pandas с плавающей точкой в ​​процентный стиль

C
0.9977
0.1234
1.000
..

до

C
99.77%
12.34%
100%
...

Для этого я делаю:

df['C'] = df['C'].map(lambda n: '{:.2%}'.format(n))

но я получаю следующую ошибку:

ValueError: Unknown format code '%' for object of type 'str'

Я тоже пытался '{:,.2%}' с той же ошибкой ...

Что я делаю не так?

Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Вы также можете использовать df.style :

df.style.format({'C': '{:.2%}'})

Если тип данных серии не является проблемой и вы хотите использовать его в качестве строки, попробуйте:

df['C'] = df.C.apply(lambda x: f"{x[:x.find('.')+3]}%")
df
    C
0   0.99%
1   0.12%
2   1.00%

ИЛИ при использовании python <3.6: </p>

df['C'] = df.C.apply(lambda x: x[:x.find('.')+3]+'%')

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

df['C'] = pd.to_numeric(df['C'], errors='coerce').fillna(0)
df.style.format({'C': '{:.2%}'})
0 голосов
/ 09 января 2019

Первый преобразовать столбец в число с плавающей точкой на astype:

df['C'] = df['C'].astype(float).map(lambda n: '{:.2%}'.format(n))

Также решение должно быть упрощено:

df['C'] = df['C'].astype(float).map("{:.2%}".format)

EDIT:

Проблема в том, что в столбце есть некоторые нечисловые значения.


Заменить нечисловое значение на 0:

print (df)
                  C
0            0.9977
1            0.1234
2  Covered fraction
df['C'] = pd.to_numeric(df['C'], errors='coerce').fillna(0).map("{:.2%}".format)
print (df)
        C
0  99.77%
1  12.34%
2   0.00%

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

df['C'] = pd.to_numeric(df['C'], errors='coerce')
df = df.dropna(subset=['C'])
df['C'] = df['C'].astype(float).map("{:.2%}".format)
print (df)
        C
0  99.77%
1  12.34%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...