Очистите фрейм данных с помощью pd.apply () - PullRequest
0 голосов
/ 13 февраля 2019

У меня большой массив данных.Я попытался привести его в порядок, повторяя строки и столбцы.Я узнал, что это занимает много времени.Поэтому я пытаюсь использовать pd.apply (), но у меня возникают проблемы с реализацией.

Вот попытка, которая занимает вечность:


def elim_com(x):
    try:
        x.replace(',',' ')
    except ValueError:
        return x

def to_number(x):
    try:
        x=float(x)
        return(x)
    except ValueError:
        return x

for row in range(df.shape[0]):
    for column in range(0,dfconvertendum.shape[1],1):
        try:
            dfconvertendum.iloc[row,column]=elim_com(dfconvertendum.iloc[row,column])
        except TypeError:
            continue
        except AttributeError:
            continue

for row in range(df.shape[0]):
    for column in range(0,df.shape[1],1):
        try:
            dfconvertendum.iloc[row,column]=to_number(dfconvertendum.iloc[row,column])    
        except TypeError:
            continue```

Here is my attempt using apply:

```## Clean using apply 

def elim_com(x):
    try:
        x.replace(',',' ')
    except ValueError:
        return x

def to_number(x):
    try:
        x=float(x)
        return(x)
    except ValueError:
        return x

dfconvertendum=dfconvertendum.apply(elim_com)
dfconvertendum=dfconvertendum.apply(to_num)

Цель состоит в том, чтобы иметь один dfс плавающей точкой, где в настоящее время существует df dtype с именем object.Я также попытался to_numeric, но это взрывает вещи разными способами.Я бы хотел легкую чистку.Я хочу оставить в такте все, что не является числом с запятыми, убрать запятые и преобразовать в число с плавающей точкой.Лучший! * * 1006

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я сделал это.Уловка в моем случае заключалась в том, чтобы очистить 'N / A' с помощью np.NaN, а затем сделать pd.apply.Это позволило мне .sort_values ​​() по желанию.

df=df.replace('N/A',np.NaN)

for col in df:
    try:
        df[col]=df[col].str.replace(',','').astype(float)
    except ValueError:
        continue
    except AttributeError:
        continue
    except KeyError:
        continue```
0 голосов
/ 13 февраля 2019

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

for col in df.columns:
    df[col]=df[col].str.replace(',','').astype(float) 

Редактировать: Измененный ответ на основе вашего отзыва

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