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

使用Pandas处理CSV文件:拆分字符串数值、行列转换问题求助

Pandas处理CSV的两个解决方案

1. 拆分混合字符串为指标名和数值

针对类似2_hour_serum_insulin0.0000这种含下划线和浮点后缀的字符串,用正则表达式精准拆分:

import pandas as pd
import re

# 定义拆分函数:分离前缀字符串和后缀数值
def split_indicator(s):
    pattern = re.compile(r'^(.*?)(\d+\.?\d*)$')
    match = pattern.match(s)
    if match:
        return match.group(1).strip(), float(match.group(2))
    return s, None  # 兼容不匹配的异常内容

# 读取原始CSV
df = pd.read_csv("你的原始文件.csv")

# 替换为你实际的混合字符串列名(比如'Measure')
df[['指标名', '数值']] = df['混合字符串列'].apply(lambda x: pd.Series(split_indicator(x)))

2. 行列转换(长表转宽表)

拆分完成后,通过透视表转换为目标格式:

# 以患者ID(替换为你实际的主键列名)为索引,转置为宽表
result = df.pivot_table(
    index='PatientID',
    columns='指标名',
    values='数值',
    aggfunc='first'  # 处理同一患者同一指标的重复值,可按需替换为mean/max等
).reset_index()

# 保存处理后的目标CSV
result.to_csv("处理完成的文件.csv", index=False)

特殊情况:原始CSV是宽格式(列名即混合字符串)

先转成长表再拆分:

# 宽表转长表,保留主键列
melted_df = df.melt(id_vars=['PatientID'], var_name='混合列名', value_name='占位')
# 拆分混合列名
melted_df[['指标名', '数值']] = melted_df['混合列名'].apply(lambda x: pd.Series(split_indicator(x)))
# 转回宽表
result = melted_df.pivot_table(index='PatientID', columns='指标名', values='数值', aggfunc='first').reset_index()

内容的提问来源于stack exchange,提问作者Sadiq Alreemi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:13:05