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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:40:25