DataFrame中replace函数意外删除过多内容:原因排查与解决
错误原因及解决方法
错误原因
你原来的代码会把整个单元格内容删掉,核心问题出在pandas默认的C解析器对NUL字节的处理逻辑:
- 用
pd.read_csv读取包含NUL字节的文件时,默认的C解析器会把NUL字节当成字符串终止符,直接截断单元格内容。比如单元格内容是\x00Test会被读成空字符串,后续的replace操作自然无法恢复原有内容,最终导出后单元格就成了空的。
正确解决方法
有两种可靠的方式可以仅移除NUL字节并保留原有单元格内容:
方法1:先清理文件内容再读取
先手动读取整个文件,移除所有NUL字节后再交给pandas解析,从根源避免解析异常:
import pandas as pd from io import StringIO # 读取文件并移除所有NUL字节 with open(r'C:\folder\test.csv', 'r', encoding='utf-8') as f: cleaned_content = f.read().replace('\x00', '') # 从清理后的内容加载DataFrame df = pd.read_csv(StringIO(cleaned_content), sep=';') # 导出处理后的文件 df.to_csv(r'C:\folder\testoutput.csv', sep=';', index=False, encoding='utf-8')
方法2:读取时用Python引擎+转换器
如果不想一次性读取大文件,可以指定使用Python解析引擎,同时为每个列设置转换器,在读取单元格内容的同时移除NUL字节:
import pandas as pd # 定义移除NUL字节的工具函数 def strip_null_characters(s): return s.replace('\x00', '') if isinstance(s, str) else s # 读取时应用转换器,处理目标列 df = pd.read_csv( r'C:\folder\test.csv', sep=';', encoding='utf-8', engine='python', converters={col: strip_null_characters for col in ['Column1', 'Column2']} ) # 导出结果 df.to_csv(r'C:\folder\testoutput.csv', sep=';', index=False, encoding='utf-8')
内容的提问来源于stack exchange,提问作者PSt
相关产品推荐
相关产品推荐

