Pandas replace,小写,else选项[Python]
我试图用数字替换列中的数据框值:Pandas replace,小写,else选项[Python],python,pandas,Python,Pandas,我试图用数字替换列中的数据框值:Professional Status Activity和Professional Status Activity Type,但在此之前,我希望确保将map中的每个值与thr数据框中的小写值进行比较,如果map中没有值,则将value=2 mapping_dict = { "Professional Status Activity": { "full time employed": 1, "pension": 1,
Professional Status Activity
和Professional Status Activity Type
,但在此之前,我希望确保将map中的每个值与thr数据框中的小写值进行比较,如果map中没有值,则将value=2
mapping_dict = {
"Professional Status Activity": {
"full time employed": 1,
"pension": 1,
"student": 2,
"part time employed": 2,
"other": 2,
"unemployed": 3
},
"Professional Status Activity Type":{
"civil servant": 1,
"judge": 1,
"army officer": 1,
"worker": 2,
"insurance officer": 2,
"notary": 2,
"lawyer": 2,
"consultant": 3,
"chief l": 3
}
}
df = df.replace(mapping_dict)
这就是我需要的逻辑:
例如,如果在df列中,职业状态活动第一行=全职雇佣
,则将其小写,并将其与map对象中的全职雇佣进行比较,这样结果将是map中的1。
如果在df列中,职业状态活动第一行=
地图中没有的东西
结果将是2,因此问题并不完全清楚,一个最简单的完整示例会有所帮助。但我想你想要这样的东西:
df["status"].apply(lambda x: mapping_dict["Professional Status Activity"].get(x.lower(),2))
这将遍历数据帧的一列(我称之为“状态”,因为您没有给出实际数据帧的示例),并在每个元素上应用一个函数。首先,它为元素调用.lower()
,将字符串转换为小写形式。然后,它使用get()
从映射dict
检查“专业状态活动”
dict中的该值。Get允许您指定一个默认值,在本例中,我将其设置为2,因此如果键不在字典中,它将返回2
如果要使用此转换版本替换列,可以这样做
df["status"] = df["status"].apply(lambda x: mapping_dict["Professional Status Activity"].get(x.lower(),2))
因此,这个问题并不完全清楚,一个最小的完整示例将有所帮助。但我想你想要这样的东西:
df["status"].apply(lambda x: mapping_dict["Professional Status Activity"].get(x.lower(),2))
这将遍历数据帧的一列(我称之为“状态”,因为您没有给出实际数据帧的示例),并在每个元素上应用一个函数。首先,它为元素调用.lower()
,将字符串转换为小写形式。然后,它使用get()
从映射dict
检查“专业状态活动”
dict中的该值。Get允许您指定一个默认值,在本例中,我将其设置为2,因此如果键不在字典中,它将返回2
如果要使用此转换版本替换列,可以这样做
df["status"] = df["status"].apply(lambda x: mapping_dict["Professional Status Activity"].get(x.lower(),2))
嘿,你们能提供一个吗?嘿,你们能提供一个吗?这是一个简单的检查值是否存在如果存在返回相同的值从地图在其他情况下返回2。因此
全职雇佣
==全职雇佣
从map其他案例返回1全职雇佣
=全职雇佣
返回不相等2@VladimirDjukic这就是我的答案应该帮助你做的-使用.get()它将从映射返回值,如果它(小写版本)在那里,否则将返回2。这不是您所需要的吗?获取错误AttributeError:“float”对象没有属性“lower”
@VladimirDjukic您可以发布一个您正在使用的数据帧的外观示例吗?我假设你正在使用的专栏有字符串,看起来像“全职雇员”等等。它很有效,谢谢!!!示例50000行上的速度有多快?也可以在单行中对这两个类别进行替换吗?很简单,检查值是否存在,如果存在,则从映射返回相同的值,否则返回2。因此全职雇佣
==全职雇佣
从map其他案例返回1全职雇佣
=全职雇佣
返回不相等2@VladimirDjukic这就是我的答案应该帮助你做的-使用.get()它将从映射返回值,如果它(小写版本)在那里,否则将返回2。这不是您所需要的吗?获取错误AttributeError:“float”对象没有属性“lower”
@VladimirDjukic您可以发布一个您正在使用的数据帧的外观示例吗?我假设你正在使用的专栏有字符串,看起来像“全职雇员”等等。它很有效,谢谢!!!示例50000行上的速度有多快?是否也可以在单行中对这两个类别进行替换?