Pandas DataFrame按逗号拆分列时如何忽略双引号内的逗号
解决方案
最优方案:直接使用pandas内置csv解析能力
你当前的错误用法是手动读取文件行转DataFrame后拆分,完全浪费了pandas自带的csv解析逻辑,pd.read_csv原生支持识别引号包裹字段,自动忽略引号内的分隔符,无需手动拆分:
with sftp.open(a) as f: df = pd.read_csv( f, quotechar='"', # 指定双引号为字段包裹标识,自动忽略引号内的逗号 skipinitialspace=True, # 自动去掉逗号后的多余空格 parse_dates=[2] # 如果需要直接把第三列识别为日期格式,可以加这个参数 )
该方案读取完成后直接得到4列数据,字符串字段的包裹引号会被自动去除,也不会拆分引号内部的逗号,字段类型会自动适配。
备选方案:必须处理单列DataFrame时用正则拆分
如果你确实有特殊场景只能拿到已生成的单列DataFrame,使用正则匹配替代普通的str.split,匹配规则会自动跳过引号内的逗号:
import re # 正则匹配:匹配双引号包裹的内容 或 不包含逗号的内容 split_pattern = re.compile(r'"?(.*?)"?(?=\s*,|$)') # 拆分后删除空列 df = df[0].str.extractall(split_pattern).groupby(level=0).first().unstack().dropna(axis=1) # 如果你需要把字符串内部的逗号去除(比如示例中将Tim, hortons转为Tim hortons),加一步替换 df = df.replace(',', ' ', regex=True)
内容的提问来源于stack exchange,提问作者user3429999
相关产品推荐
相关产品推荐

