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

pandas DataFrame无法正确读取生成的仅含float64温度列的CSV文件

问题原因
  • 你在Notepad++里看到的「NUL」不是普通文本字符串"NUL",是ASCII码为0的空控制字符(转义表示为\x00)。你现有代码替换的是字符串"NUL",完全无法处理这个不可见控制字符,导致最终写入CSV的温度值前缀带有\x00。
  • pandas解析数值类型时,遇到字段开头的不可见控制字符,会判定内容不是合法数值,直接转换为NaN。而你用Notepad++打开文件并手动保存时,软件会自动过滤掉文件中的\x00空控制字符,因此保存后的文件可以被pandas正常解析。
解决方案

方法1:预处理阶段直接清除空控制字符

把原有替换逻辑中针对"NUL"的替换,改为直接清除\x00字符,同时可以配合正则提取严格过滤温度数值,避免其他异常字符干扰:

import re

lines = f.readlines()
processed_temp = []
for line in lines:
    # 清除空控制字符和方括号
    line = line.replace("[", " ").replace("\x00", "")
    # 正则匹配提取温度数值,避免其他冗余内容混入
    temp_res = re.search(r"Temp:\s*(\d+\.\d+)C", line)
    if temp_res:
        processed_temp.append(temp_res.group(1))

# 后续将processed_temp的内容写入CSV即可

方法2:读取CSV时做数据清洗

如果已经生成了带异常字符的CSV文件,也可以在pandas读取阶段对温度列做清洗后再转换类型:

import pandas as pd

# 先以字符串类型读取所有列,避免提前转数值产生NaN
df = pd.read_csv("temp.csv", dtype=str)
# 清除温度列中所有非数字、小数点的字符,再转float类型
df["温度列名"] = df["温度列名"].str.replace(r"[^\d.]", "", regex=True).astype("float64")

内容的提问来源于stack exchange,提问作者Doug Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:06:03