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
相关产品推荐
相关产品推荐

