как улучшить на l oop дюйм python - PullRequest
0 голосов
/ 06 августа 2020

У меня есть этот код:

    for row in range(len(df[col])):
        df[col][row] = int(df[col][row].replace(',','')) 
    df[col] = df[col].astype(int)
    df[col] = np.round(df[col]/500)*500  #rounds the numbers to the closest 500 multiple.
    df[col] = df[col].astype(int) #round returns a float, this turns it back to int after rounding  

В for l oop: df [col] [row] .replace (',', '') в основном удаляет запятые из чисел, которые хранится в виде объектов, например 1,430, а затем преобразует его в int, например, 1430

Затем мне нужно добавить df [col] = df [col] .astype (int), потому что в противном случае следующий np.round ( ) выдает ошибку: объект 'float' не имеет атрибута 'rint'

Дело в том, что после np.round () мне нужно снова добавить .astype (int), потому что раунд, как я он возвращает число с плавающей запятой, но мне нужны целые числа.

Я вижу, что выполнение этого довольно долгое, даже если мой фрейм данных составляет всего 32 x 17

все равно есть может улучшить ??

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Не делайте этого for row in range(len(df[col])): делайте это: for row in df[col]

или вместо этого для использования этого:

Используйте это для фактической замены строки другой строкой: DataFrame.replace

или лучше используйте лямбда: DataFrame.apply ( Пример здесь )

0 голосов
/ 06 августа 2020

Будет ли более общая замена с использованием лямбда-функции df[col].apply(lambda x: x.str.replace(',','')) более подходящей и эффективной по времени?

И не даст ли один такой лайнер то, что вам нужно?

df['col'] = (df['col'] / 500).astype(int) * 500

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...