You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas拆分分号分隔字符串列时如何保留字段首尾空格

问题原因
  • pandas.read_csv默认开启空值检测、引用符解析逻辑,会隐式修改读取到的原始字符串,导致行首尾的空格在拆分前就已丢失
  • Series.str.split(expand=True)在部分版本中存在隐式修剪首尾空白拆分结果的逻辑,和原生re.split(';', text)行为不一致,无法保留首尾的全空格字段
修复代码

直接关闭所有读取阶段的隐式处理,拆分阶段直接调用原生re.split保证行为完全对齐:

import pandas as pd
import re
import csv

path_file = 'FILE.csv'
chunksize = 400    

with pd.read_csv(
    path_file,
    sep="#$@",
    dtype=str,
    chunksize=chunksize,
    header=None,
    engine='python',
    skip_blank_lines=False,
    encoding='utf-8-sig',
    encoding_errors='ignore',
    # 关闭所有隐式内容修改逻辑
    quoting=csv.QUOTE_NONE,
    na_filter=False,
    skipinitialspace=False
) as reader:
    for chunk_df in reader:
        # 用原生re.split拆分,完全匹配预期输出规则
        split_rows = chunk_df[0].apply(lambda x: re.split(';', x)).tolist()
        chunk_df = pd.DataFrame(split_rows)
        # 原有表头处理逻辑
        chunk_df.columns = chunk_df.iloc[0]
        chunk_df = chunk_df[1:]
        display(chunk_df)
效果验证

使用提供的测试字符串验证,拆分结果和预期完全一致:

test_text = '    ;2022;01;4306809;XX; XXXXXXX;  0  ;internet;ETHERNET;10 ;    '
# 原生re.split输出
print(re.split(';', test_text))
# ['    ', '2022', '01', '4306809', 'XX', ' XXXXXXX', '  0  ', 'internet', 'ETHERNET', '10 ', '    ']

# 代码中使用的拆分逻辑输出
print(pd.Series([test_text]).apply(lambda x: re.split(';', x)).iloc[0])
# 输出和re.split完全一致,所有前导、尾随空格,首尾全空格字段全部保留

内容的提问来源于stack exchange,提问作者Augusto Lima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:39:17