Python3 Pandas按条件拆分指定列至新增列未生效,求助修正方案
Python3 Pandas按条件拆分指定列至新增列未生效,求助修正方案
我帮你排查下问题哈~你的代码没达到预期效果主要有两个核心原因,咱们一步步来调整:
问题1:分隔符不匹配,拆分逻辑不对
你要拆分的列4内容是0.5 , Z20/1 ; 120,里面的逗号是空格+逗号+空格(,),而且还有分号分隔的部分;但你代码里用的是, (逗号+空格)作为分隔符,不仅匹配不上原内容的逗号分隔,而且就算匹配到,也只能拆出2部分,没法填充到7、8、9这3列里。
问题2:直接赋值不存在的列容易出索引对齐问题
原DataFrame没有7、8、9列的时候,直接用loc条件赋值,偶尔会因为索引匹配的问题导致赋值失败,更稳妥的方式是先拆分出结果,再合并到原表。
修正后的完整代码
import numpy as np import pandas as pd var001_sf = input("Enter file name to import : ") var002_sf = var001_sf + ".csv" # 读取数据,制表符分隔符合你的源数据格式 var002_ar1 = pd.read_csv(var002_sf, sep='\t', header=None) var002_ar1 = var002_ar1.dropna(axis=0) # 移除空行 # 关键步骤:先统一分隔符,把"; "替换成", ",再按" , "拆分出3列 split_result = var002_ar1.iloc[:, 4].str.replace(' ; ', ' , ', regex=False).str.split(' , ', n=2, expand=True) # 给拆分后的列命名为7、8、9,对应目标列位置 split_result.columns = [7, 8, 9] # 把拆分结果合并到原DataFrame var002_ar1 = pd.concat([var002_ar1, split_result], axis=1) # 只保留"LUB"行的拆分结果,其他行清空这三列 var002_ar1.loc[var002_ar1.iloc[:, 6] != 'LUB', [7, 8, 9]] = np.nan # 保存时关闭索引输出,避免多出不必要的行号列 var002_ar1.to_csv("t250221.csv", sep='\t', index=False)
效果说明
运行这段代码后,列6为"LUB"的那一行:
- 列7会是
0.5 - 列8会是
Z20/1 - 列9会是
120
其他行的7、8、9列会是空值,完全符合你的需求~
备注:内容来源于stack exchange,提问作者sachee
相关产品推荐
相关产品推荐

