使用字典更改列中的某些值

原文标题Changing certain values in a column using a dictionary

从导入的数据中,我想用特定字母替换所有数字(根据该数据创建一个新列)。问题是正在导入的数据有一些带有字母的单元格和一些带有数字的单元格。我想保留有字母的单元格没有变化,但将有数字的单元格更改为字母。

我制作了一本字典来实现改变;

def get_value(value, dictionary):
    print(dictionary.values())

    if value in dictionary.values():
        answer = [k for k, v in dictionary.items() if v == value][0]
        # answer = answer[1]
    else:
        answer = "No data"

    return answer
Num_to_letter ={
    "F": "1",
    "G": "2",
    "H": "3",
    "J": "4",
    "K": "5",
    "M": "6",
    "N": "7",
    "Q": "8",
    "U": "9",
    "V": "10",
    "X": "11",
    "Z": "12"

}
df['New_column'] = df['Old_column'].apply(lambda x: get_value(x,Num_to_letter))

生成新列时,对于所有有字母的单元格,我得到“无数据”,对于所有有数字的单元格,我得到“无数据”,除非它的数字是 10,11 或 12,这些数字能够转换成一封信。

我的代码有什么问题?为什么除了两位数之外我还得到“无数据”?

原文链接:https://stackoverflow.com//questions/71476645/changing-certain-values-in-a-column-using-a-dictionary

回复

我来回复
  • Amirhossein Kiani的头像
    Amirhossein Kiani 评论

    问题是,当您在 pandas 数据框中的列上应用函数时,它将应用于该列的所有单元格并返回定义函数返回的值。您在get_value函数中返回了一个字母或“无数据”。既然你说你希望你的字母不变,所以你不应该在你的函数中返回“无数据”;相反,您应该返回值本身。因此,我建议您将代码更改为以下内容:

    def get_value(value, dictionary):
    
        if isinstance(value, str) and value.isnumeric():
          return dictionary[value]
        else:
          return value
    
    Num_to_letter ={
        "F": "1",
        "G": "2",
        "H": "3",
        "J": "4",
        "K": "5",
        "M": "6",
        "N": "7",
        "Q": "8",
        "U": "9",
        "V": "10",
        "X": "11",
        "Z": "12"
    
    }
    Num_to_letter_reverse = { Num_to_letter[k]:k for k in Num_to_letter}
    df['New_column'] = df['Old_column'].apply(lambda x: get_value(x,Num_to_letter_reverse))
    
    2年前 0条评论