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

设备导出CSV文件用Pandas读取全为NaN的解决方案咨询

解决设备导出CSV无法用Pandas正常加载的问题

这种设备导出的CSV格式不规范的问题我碰到过不少,咱们一步步来排查解决:

先搞清楚问题根源

设备导出的CSV通常会有这些格式问题:

  • 非标准编码(比如UTF-16、GBK,而非常见的UTF-8)
  • 隐藏的BOM头(比如UTF-8 BOM)
  • 分隔符不是逗号(可能是制表符\t、分号;或者竖线|)
  • 换行符不统一(比如用\r而非\n)
  • 数据中包含奇怪的非打印字符或错误的引号包裹

步骤1:检测文件编码和原始内容

首先得确认文件的编码和实际内容,别上来就用Pandas读。

检测编码

用chardet库来自动检测(如果没装先跑pip install chardet):

import chardet

with open("你的设备导出文件.csv", "rb") as f:
    detect_result = chardet.detect(f.read())

print("检测到的编码:", detect_result['encoding'])
print("置信度:", detect_result['confidence'])

查看原始内容(包括表头行)

读取文件跳过前69行,看看第70行表头和后续数据的真实样子(用repr()能显示隐藏字符):

with open("你的设备导出文件.csv", "r", encoding=detect_result['encoding']) as f:
    # 跳过前69行
    for _ in range(69):
        next(f)
    # 读取表头行
    header_line = f.readline()
    print("表头行原始内容:", repr(header_line))
    # 读取5行数据看看
    for i in range(5):
        data_line = f.readline()
        print(f"数据行{i+1}原始内容:", repr(data_line))

从输出里你能看到:

  • 表头和数据是用什么分隔的(比如\t代表制表符)
  • 有没有多余的换行符(比如\r\n还是\r)
  • 有没有奇怪的字符(比如\x00这类空字符)

步骤2:用正确的参数加载Pandas

根据上面的检测结果,调整pd.read_csv()的参数:

常见参数组合示例

情况1:编码为UTF-16,分隔符是制表符

import pandas as pd

df = pd.read_csv(
    "你的设备导出文件.csv",
    skiprows=69,  # 跳过前69行
    header=0,     # 跳过skiprows后,第一行就是表头
    encoding='utf-16',
    sep='\t',     # 制表符分隔
    engine='python'  # Python引擎对复杂分隔符支持更好
)

情况2:UTF-8带BOM头,逗号分隔

df = pd.read_csv(
    "你的设备导出文件.csv",
    skiprows=69,
    header=0,
    encoding='utf-8-sig',  # 处理UTF-8 BOM
    sep=',',
    quotechar='"',  # 如果数据有引号包裹,指定引号字符
    skipinitialspace=True  # 忽略分隔符后的空格
)

情况3:换行符是\r(老式Windows格式)

df = pd.read_csv(
    "你的设备导出文件.csv",
    skiprows=69,
    header=0,
    encoding='gbk',
    sep=',',
    lineterminator='\r'  # 指定换行符
)

步骤3:处理极端情况——手动解析

如果上面的方法都不行,那就手动逐行解析文件,完全控制解析逻辑:

import pandas as pd

data_rows = []
with open("你的设备导出文件.csv", "r", encoding='utf-16') as f:
    # 跳过前69行
    for _ in range(69):
        next(f)
    # 获取表头
    header = f.readline().strip().split('\t')  # 替换成你检测到的分隔符
    # 逐行读取数据
    for line in f:
        cleaned_line = line.strip()
        if not cleaned_line:
            continue  # 跳过空行
        row = cleaned_line.split('\t')  # 同样替换成分隔符
        data_rows.append(row)

# 转换成DataFrame
df = pd.DataFrame(data_rows, columns=header)

额外提示:别依赖Excel中转

Excel另存CSV时经常会修改格式(比如自动转换分隔符、改变编码),导致后续加载出问题,尽量直接处理设备导出的原始文件,避免中转环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:38:14