使用字典更改列中的某些值
python 199
原文标题 :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,这些数字能够转换成一封信。
我的代码有什么问题?为什么除了两位数之外我还得到“无数据”?
回复
我来回复-
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年前