Преобразование данных Python Если df [column] = "A", то df [column] = 1 - (Подстановка "A" с 1) - PullRequest
0 голосов
/ 11 ноября 2019

Я новичок в Python и у меня большой набор данных, для которого я буду строить несколько моделей регрессии. Есть несколько особенностей, которые используют значения te в наблюдении. Я хочу заменить эти значения AZ на 1-26, чтобы включить их в регрессионную модель. Я мог бы использовать getdummies, но он будет возвращать слишком много переменных. Я надеюсь преобразовать переменную, или все из них, если это возможно, заменив «A» на 1, «B» на 2 и т. Д. Большинство моих поисков операторов if, then выполняют функцию, а не преобразовывают данные,Я использовал NP.where для преобразования двоичных переменных, но никогда ничего такого большого. Любое понимание приветствуется.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Это то, чем я закончил. Он отлично работает и может быть продублирован путем изменения названия столбца. Спасибо.

Disq_and_Qual_flag_Mapped = { np.nan : 0, 'A' : 1, 'B' : 2, 'C' : 3, 'D' : 4,  'E' : 5, 'F' : 6, 'G' : 7, 'H' : 8, 'I' : 9,
                             'J' : 10, 'K' : 11, 'L' : 12, 'M' : 13, 'N' : 14, 'O' : 15, 'P' : 16, 'Q' : 17, 'R' : 18, 'S' : 19,
                             'T' : 20, 'U' : 21, 'V' : 22, 'W' : 23, 'X' : 24, 'Y' : 25, 'Z' : 26}


df['Disq_and_Qual_flag2'] = df['Disq_and_Qual_flag'].map(Disq_and_Qual_flag_Mapped)

df.head()
0 голосов
/ 11 ноября 2019

Если я правильно понял, что вам нужно, я думаю, вы должны просто создать отображение из заглавных букв в целые числа алфавита. Затем вы можете отобразить эти буквы на соответствующие позиции, используя панд map.

import pandas as pd
import numpy as np
from string import ascii_uppercase

# Create DataFrame
df = pd.DataFrame(data={'id': [1,2,3,4,5], 
                        'letter_flag': [np.nan, 'A', 'A', 'T', 'A']})

# Dictionary comprehension to create a mapping from uppercase letters to postions
# i.e. {'A': 1, 'B': 2, ..., 'Z': 26}
letter_mapping = {letter: str(index) for index, letter in enumerate(ascii_uppercase, start=1)}

# Create new column with the mapping
df['mapped_flag'] = df['letter_flag'].map(letter_mapping)
...