Pandas серия к поплавкам - PullRequest
       0

Pandas серия к поплавкам

0 голосов
/ 22 февраля 2020

У меня есть pandas кадр данных, который выглядит следующим образом:

import pandas as pd
    data = {"col1":["2%", "3%", "4%", "5%"],"col2":["N/A", "N/A", "4%", "5%"]}


    df = pd.DataFrame(data)

Как я могу преобразовать эти столбцы в числа с плавающей запятой?

Сложность, с которой я сталкиваюсь, это строки с "N/A"

Я пробовал это:

for col_name in df.columns:
   df[col_name]=df[col_name].replace(r'%','',regex=True).astype(float)

Но это не удается, когда я вхожу во второй столбец

Может кто-нибудь помочь с этой проблемой?

Ответы [ 2 ]

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

Для вашего примера это должно работать. Обычно очищает символ%, а затем превращает любой, не похожий на число, в NaN. Тогда это тривиально, чтобы превратиться в поплавок. Это более устойчиво, если появятся другие тексты, но вам все еще нужно иметь возможность убирать символы вокруг текста

df = pd.DataFrame(data)

for col_name in df.columns:
    aux_series = df[col_name].fillna('').str.replace('%', '')
    aux_series[-aux_series.str.isnumeric()] = None
    aux_series = aux_series.astype(float, errors='ignore')
    df[col_name] = aux_series
1 голос
/ 22 февраля 2020

Используйте DataFrame.replace со словарем, затем DataFrame.astype для преобразования в число с плавающей запятой:

df = df.replace({'%': '', 'N/A': np.NaN}, regex=True).astype(float)

   col1  col2
0   2.0   NaN
1   3.0   NaN
2   4.0   4.0
3   5.0   5.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...