Очистка процентного столбца (десятичное + целое число) в Python с целым числом - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть столбец процентов, который содержит числа типа 0.4567 , 0.1564 , 19 , 23, 0 , 0.1234, где мне требуется нормализация к целым числам, т.е. 45 , 15, 19 ,23 , 0 , 12 как таковая. Я воспроизвел пример, как показано ниже.

import pandas as pd
import numpy as np
n_row =  10
dicti = {'id':[coli for coli in range(1,(n_row+1))],
     'perc_col':[30,0.4546,0.76543223190,10,0,0.29567,93,15,0.31,0.456]}
df = pd.DataFrame(dicti)
df

Вывод фрейма данных

enter image description here

Ожидаемый результат
enter image description here

1 Ответ

2 голосов
/ 17 апреля 2020

Вы можете нормализовать ненормализованный столбец данных и преобразовать в целое число (по вашему вопросу) с помощью:

df['perc_col'] = df['perc_col'].apply(lambda x : int(x) if x > 1 else int(100*x))

Вывод

   id  perc_col
0   1        30
1   2        45
2   3        76
3   4        10
4   5         0
5   6        29
6   7        93
7   8        15
8   9        31
9  10        45

По вашим комментариям, если у вас есть NaN значения и хотите оставить их без изменений, вы не можете преобразовать столбец в int. Вы можете оставить его как число с плавающей точкой, но изменить его на целые числа следующим образом:

df['perc_col'] = df['perc_col'].apply(lambda x : x//1 if x > 1 else 100*x//1)

Выведите это время (при изменении последнего значения в исходном словаре на np.nan):

   id  perc_col
0   1      30.0
1   2      45.0
2   3      76.0
3   4      10.0
4   5       0.0
5   6      29.0
6   7      93.0
7   8      15.0
8   9      31.0
9  10       NaN

Чтобы удовлетворить ваше второе дополнительное требование обработки строк, вы можете по существу игнорировать строки, если измените команду на:

df['perc_col'] = df['perc_col'].apply(lambda x : x if isinstance(x, str) else (x//1 if x > 1 else 100*x//1))
...