如何在DataFrame中移除字符串冒号前的所有内容
批量提取DataFrame中
key:value格式字符串冒号后内容的实现方案 给定的样例DataFrame中,第0列为无冒号的纯数值列,其余列均为key:value格式字符串,处理时可跳过无需改动的列,仅对目标列执行提取操作。
高性能向量化处理(推荐大表使用)
该方案基于pandas内置字符串向量化操作实现,处理速度远高于逐行循环逻辑,适合数据量较大的场景:
# 定位所有包含key:value结构的目标列,排除无冒号的第0列 target_cols = df.columns[1:] # 按第一个冒号分割字符串,提取冒号后的内容 df[target_cols] = df[target_cols].apply( lambda col: col.str.split(pat=':', n=1).str[1] ) # 可选:将提取得到的字符串转换为数值类型,支撑后续计算逻辑 df[target_cols] = df[target_cols].astype('float64')
注:参数
n=1表示仅在字符串中第一个冒号位置执行分割,避免后续存储的数值内容如果包含冒号时被误切割,提升逻辑鲁棒性。
全表自适应处理(适合列结构不固定的场景)
如果无需手动指定目标列,可对整个DataFrame做自适应判断,自动跳过无冒号的单元格:
# 逐单元格判断:如果是带冒号的字符串,就提取冒号后内容,否则保留原值 df = df.applymap( lambda cell: cell.split(':', 1)[1] if isinstance(cell, str) and ':' in cell else cell ) # 可选:统一将全表内容转换为数值类型 df = df.astype('float64')
以上两种方法执行完成后,样例中原值1:-0.860107会被替换为-0.860107,6:0.333333会被替换为0.333333,完全匹配仅保留冒号后数值的需求。
内容的提问来源于stack exchange,提问作者ptn96
相关产品推荐
相关产品推荐

