Извлечь номер из столбца, чтобы создать новый столбец в Pandas - PullRequest
0 голосов
/ 13 марта 2020

У меня есть столбец с именем Rate, как показано ниже. Все, что я хочу сделать, это создать новый столбец Rate_New, который будет извлекать только числовую часть из Rate, которая равна 0,25. Как это сделать? Спасибо !!

import pandas as pd 
df = pd.DataFrame({'Rate':['$0.25/Wh', '$0.25/Wh', '$0.25/Wh', '$0.25/Wh']})
df

Ответы [ 6 ]

1 голос
/ 13 марта 2020
df["Rate_New"] = df.Rate.str.split(r"[$/]").apply(lambda x: x[1]).astype(float)
  • Метод .str.split() преобразует исходные значения в списки:

    0    [, 0.25, Wh]
    1    [, 0.25, Wh]
    2    [, 0.25, Wh]
    3    [, 0.25, Wh]
    Name: Rate, dtype: object           
    
  • Функция лямбда извлекает средние элементы (т.е. с индексом 1) из этих списков:

    0    0.25
    1    0.25
    2    0.25
    3    0.25
    Name: Rate, dtype: object
    
  • Затем метод .astype() изменяет тип данных на float:

    0    0.25
    1    0.25
    2    0.25
    3    0.25
    Name: Rate, dtype: float64
    
  • df["Rate_New"] = затем назначает такие созданные серии в качестве нового столбца для вашего кадра данных:

           Rate  Rate_New
    0  $0.25/Wh      0.25
    1  $0.25/Wh      0.25
    2  $0.25/Wh      0.25
    3  $0.25/Wh      0.25
    
1 голос
/ 13 марта 2020

Вот мое решение, вы можете скопировать и вставить его для использования:

df['Rate_New'] = df.Rate.apply(lambda x: float(x.replace("$","").replace("/Wh","")))

Или это, без применения, без атрибута:

df["Rate"].str.replace("$","").str.replace("/Wh","")

Вот версия с использованием регулярных выражений , стиль атрибута не применяется.

repl = lambda m: m.group(1)
df["Rate"].str.replace(r'\$(.+?)\/Wh', repl, regex=True)
0 голосов
/ 13 марта 2020
df["Rate_New"] = df.Rate.str.replace(r"\$(.+)/Wh", lambda m: m.group(1)).astype(float)
  • Регулярное выражение имеет 1 группу захвата - все символы от $ до /Wh.
  • Лямбда-функция заменяет исходную строку этой группой захвата.
  • Затем метод .astype() меняет тип данных (с «объекта») на float.
0 голосов
/ 13 марта 2020

Вы можете заменить их следующим образом:

df["Rate_new"] = df["Rate"].apply(lambda x: x.replace("$", "").replace("/Wh", ""))
0 голосов
/ 13 марта 2020

Этого можно достичь с помощью следующего кода, который вы можете поместить в отдельные ячейки Jupyter:

    # Import the Pandas and regex libraries 
    import pandas as pd
    import re

    # Use your dataframe
    df = pd.DataFrame({'Rate':['$0.25/Wh', '$0.25/Wh', '$0.25/Wh', '$0.25/Wh']})

    # State regex pattern that extracts the value
    pattern = r"(?:[]{1}[,\d]+.?\d*)"

    # Iterate over rate column of dataframe and perform regex to extract value
    search = []    
    for values in df['Rate']:
        search.append(re.search(pattern, values).group())

    df['Rate_New'] = search

   # Display the result of the dataframe with appended column
    df
0 голосов
/ 13 марта 2020

Сначала добавьте метод, который извлекает число из Rate, скажем, extract_rate()

def extract_rate(rate):
    return rate.replace('$', '').replace('/Wh', '')

Затем вы можете применить метод ко всему столбцу для создания нового столбца.

df['Rate_new'] = df.apply(lambda row: extract_rate(row['Rate']), axis = 1)t_rate(row['Rate']), axis = 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...