Python数据转换如果df [column] =“ A”,则df [column] = 1-(用1代替“ A”)

时间:2019-11-11 04:05:25

标签: python pandas numpy transformation substitution

我是Python的新手,并且拥有一个庞大的数据集,我将为其构建多个回归模型。观测中有几个使用te值A-Z的功能。我想将这些A-Z值替换为1-26,以便可以将它们包括在回归模型中。我可以使用getdummies,但是它将返回太多变量。我希望对变量或所有可能的变量进行转换,方法是将“ A”替换为1,将“ B”替换为2,以此类推。我大部分的搜索if,then语句执行的功能与转换数据相反。我已经使用NP.where来转换二进制变量,但是从来没有这么大的东西。感谢您提供任何见识。

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的需求,我认为您应该创建一个从大写字母到字母位置整数的映射。然后,您可以使用熊猫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)

答案 1 :(得分:0)

这就是我最终得到的。它工作完美,可以通过更改列名来复制。谢谢。

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()