Найти столбцы, содержащие подстроку, и заменить ее - Панды - PullRequest
2 голосов
/ 14 мая 2019

У меня проблема со спецсимволами в датафрейме. Например

ID  license     value1     value2   value3 ...
2     a       "5,120.000"    15%     45    ...
1     b       "3,246.440"    10%     65    ...
4     b       "1,890.220"    50%     10    ...
5     c       "2,005.240"    32%     12    ...

Проблема в том, что у меня так много столбцов, около 150, и это не нормально, если я иду столбец за столбцом и отдельно заменяю значения. Итак, мне нужно заменить любые специальные символы и преобразовать числа (в данный момент - строковые столбцы) в плавающие.

Я пробовал что-то вроде этого:

def drop_percent(data):
    for el in data.columns:
        if data[el].astype(str).str.contains('%').any():
            data[el] = data[el].str.strip("%").astype(float)
    return data


def drop_commas(data):
    for el in data.columns:
        if data[el].astype(str).str.contains(',').any():
            mcd[el] = mcd[el].str.replace(',','')
        if data[el].astype(str).str.contains('"').any():
            mcd[el] = mcd[el].str.replace('"', '')
            mcd[el] = mcd[el].astype(float)

    return data

У меня ошибка:

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

1 Ответ

2 голосов
/ 14 мая 2019

Вот простой и прямой способ удаления всех не специальных символов из столбцов с использованием списка и str.replace:

(pd.concat([df[col].astype(str).str.replace(r'\W+', '', regex=True) 
           for col in df.columns], 1))

  license   value1 value2 value3
2       a  5120000     15     45
1       b  3246440     10     65
4       b  1890220     50     10
5       c  2005240     32     12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...