Pandas как заменить несколько столбцов str% на число с плавающей запятой? - PullRequest
1 голос
/ 20 февраля 2020
          A        B         C       D        E      F
0    CEKAPE   23.60%   117.374   0.53%    0.11%    <2%
1    HYTFFZ   25.32%   116.250   1.88%    0.38%     5%

У df есть несколько столбцов, в которых в качестве строкового типа содержатся цифры перцепции. Этот код обрабатывает только один столбец за раз. df['D'] = df['D'].str.strip('%').astype(float) / 100 Как написать код, когда нужно обработать десятки туч?

          A        B         C        D        E      F
0    CEKAPE   0.2360   117.374   0.0053   0.0011    <2%
1    HYTFFZ   0.2532   116.250   0.0188   0.0038   0.05

1 Ответ

1 голос
/ 20 февраля 2020

Используйте pd.to_numeric с errors = coerce и DataFrame.stack + DataFrame.unstack, избегая необходимости использовать apply:

new_df = (pd.to_numeric(df.replace('%','',regex = True).stack(),
                        errors = 'coerce')
            .div(100)
            .unstack()
            .fillna(df))
print(new_df)
        A       B        C       D       E     F
0  CEKAPE   0.236  1.17374  0.0053  0.0011   <2%
1  HYTFFZ  0.2532   1.1625  0.0188  0.0038  0.05

или dropna = False и Series.str.replace

new_df = (pd.to_numeric(df.stack(dropna = False).str.replace('%',''),
                        errors = 'coerce')
            .div(100)
            .unstack()
            .fillna(df)
         )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...