使用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
相关产品推荐
相关产品推荐

