如何从DataFrame复合名称字符串中拆分结构名、剂量与体积?
解决方案
问题核心是原代码按固定位置拆分字符串,无法适配多词结构名。正确思路是从字符串末尾提取最后两个元素作为dose和volume,前面所有元素合并为结构名,以下是两种可行方法:
方法1:使用str.rsplit(推荐,更简洁)
利用rsplit从右侧指定分割次数,直接拆分出目标列:
# 从右侧分割2次,拆分出三列 df[['structure_name', 'dose', 'volume']] = df['structure'].str.rsplit(n=2, expand=True) # 可选:将dose和volume转换为数值类型 df['dose'] = pd.to_numeric(df['dose']) df['volume'] = pd.to_numeric(df['volume'])
rsplit(n=2)会把字符串从右往左拆成3部分:前面所有连续非空格内容作为第一部分,最后两个独立元素分别作为第二、第三部分,完美适配多词结构名。
方法2:自定义函数拆分
如果需要更灵活的逻辑,可用apply配合自定义函数处理每个字符串:
import pandas as pd def parse_structure(s): parts = s.split() # 取最后两个元素作为dose和volume,前面的合并为结构名 structure = ' '.join(parts[:-2]) dose = parts[-2] volume = parts[-1] return pd.Series([structure, dose, volume]) # 应用函数并拆分到新列 df[['structure_name', 'dose', 'volume']] = df['structure'].apply(parse_structure) # 转换数值类型 df['dose'] = pd.to_numeric(df['dose']) df['volume'] = pd.to_numeric(df['volume'])
处理后的数据示例:
| structure_name | dose | volume |
|---|---|---|
| CEREBRO | 0.0 | 0.0 |
| CEREBRO | 10.0 | 100.0 |
| TRONCO | 0.0 | 0.0 |
| TRONCO | 5.0 | 100 |
| OLHO DIR | 0.0 | 0.0 |
| OLHO DIR | 8.0 | 100.0 |
内容的提问来源于stack exchange,提问作者Gustavo Morlin Moretto
相关产品推荐
相关产品推荐

