如何理解带有3次replace调用的lambda表达式处理DataFrame的代码?
首先明确你对代码的整体流程理解是正确的,核心疑问点的str.replace()第三个参数是count参数,用于指定本次替换操作最多替换多少个匹配到的字符。
完整代码逻辑拆解
df['Current Ver'] = df['Current Ver'].astype(str).apply(lambda x : x.replace('.', ',',1).replace('.', '').replace(',', '.',1)).astype(float)
整行代码的作用是把多分隔点的版本号(比如2.3.4)转换为仅保留第一个分隔点的浮点数(比如2.34),具体每一步逻辑如下:
astype(str):将Current Ver列的所有值统一转为字符串类型,避免非字符串类型调用替换方法时报错。apply(lambda x: ...):遍历列中每个值x,对每个x执行三次替换操作:- 第一次
replace('.', ',', 1):仅把x中第一个出现的.替换为,,剩余的.保持不变。这里的参数1就是count值,限定本次最多替换1次。举个例子,原x为5.2.7.1,执行后变为5,2.7.1。 - 第二次
replace('.', ''):没有指定count值,默认替换所有匹配到的.,也就是把剩下的所有.全部删除。上面的例子执行后变为5,271。 - 第三次
replace(',', '.', 1):同样限定count为1,把之前替换成,的唯一一个字符换回.。上面的例子执行后变为5.271。
- 第一次
astype(float):把处理完成后仅含一个.的字符串转为浮点数类型,方便后续的数值比较、计算等操作。
示例验证
举个完整的处理流程方便理解:
原版本号值:3.1.4.15
- 转字符串:
'3.1.4.15' - 第一次替换:
'3,1.4.15' - 第二次替换:
'3,1415' - 第三次替换:
'3.1415' - 转浮点数:
3.1415
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

