You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python处理腿部不对称数据集:将L值转负值、R值转正值

腿不对称数据正负转换问题解决

问题

我有一套左右腿不对称数据的数据集,为了可视化需要,想把左腿(标记'L')对应的数据转为负值,右腿(标记'R')对应的数据转为正值。

尝试了以下代码:

df_selection['Asymmetry)'] = df_selection['Assymetry'].str.replace('R','+').replace('L','-')

但存在两个问题:符号会被加到数字后面,且只有'R'能被替换,'L'的替换不生效。期望输出格式如下:

Asymmetry
1.3
2.5
-3.1

注:原数据集的Assymetry列内容格式为R1.3、R2.5、L3.1这类形式。

解决方案

方案1:拆分符号与数值后计算

先分离侧别标记和数值,再根据侧别赋予正负:

# 提取侧别(首字符)
df_selection['side'] = df_selection['Assymetry'].str[0]
# 提取数值部分并转为浮点数
df_selection['value'] = df_selection['Assymetry'].str[1:].astype(float)
# 生成目标列
df_selection['Asymmetry'] = df_selection.apply(lambda x: x['value'] if x['side'] == 'R' else -x['value'], axis=1)
# 清理中间列(可选)
df_selection = df_selection.drop(['side', 'value'], axis=1)

方案2:正则匹配转换

用正则提取侧别和数值,直接返回带正负的数值:

import re

def convert_val(s):
    match = re.match(r'([RL])([\d.]+)', s)
    if match:
        side, num = match.groups()
        return float(num) if side == 'R' else -float(num)
    return s  # 处理非预期格式的行

df_selection['Asymmetry'] = df_selection['Assymetry'].apply(convert_val)

方案3:正则替换调整格式

通过正则替换直接将侧别标记转为前置的正负号,再转数值类型:

# 替换R开头的内容,将R转为前置+号
df_selection['Asymmetry'] = df_selection['Assymetry'].str.replace(r'^R([\d.]+)', r'+\1')
# 替换L开头的内容,将L转为前置-号
df_selection['Asymmetry'] = df_selection['Asymmetry'].str.replace(r'^L([\d.]+)', r'-\1')
# 转为浮点数类型
df_selection['Asymmetry'] = df_selection['Asymmetry'].astype(float)

以上三种方法都能得到你需要的格式,方便后续做可视化图表。

内容的提问来源于stack exchange,提问作者Markus Fürst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:40:28