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

pd.read_csv读取文本文件列错位致NaN,求代码修改方案

Pandas读取文本文件列错位(第二列全为NaN)的解决方法

问题场景

使用Pandas的pd.read_csv读取含两列数据的文本文件时,出现列错位,第二列数据全部显示为NaN。

原代码:

import pandas as pd
filename = r'data.txt'
#read text file into pandas DataFrame
df = pd.read_csv(
    filename,
    sep="\t",
    skiprows=3,
    names=['Frequency / MHz', 'S2,1 [SPara1]/abs,dB'],
)

df

读取结果示例:

Frequency / MHz S2,1 [SPara1]/abs,dB
0   0.1423125 -...  NaN
1   0.146625 -...   NaN
2   0.1509375 -...  NaN
3   0.15525 -...    NaN
4   0.1595625 -...  NaN
... ... ...
4059    17.64675 ...    NaN
4060    17.651063 ...   NaN
4061    17.655375 ...   NaN
4062    17.659688 ...   NaN
4063    17.664 ...  NaN

样本data.txt内容片段:

Frequency / MHz                S2,1 [SPara1]/abs,dB
----------------------------------------------------------------------
                   0.138                     -0.92293553
               0.1423125                     -0.93264485
                0.146625                     -0.94201416
               0.1509375                     -0.95106676
                 0.15525                     -0.95982484

问题原因

  1. 分隔符错误:原代码指定sep="\t"(制表符分隔),但实际数据是用多个连续空格分隔,Pandas无法正确拆分列,导致整行内容被归入第一列,第二列无数据显示为NaN。
  2. 跳过行数不合理:skiprows=3会跳过前3行(包括第一条数据),导致丢失部分数据。

解决代码

方案一:使用sep='\s+'匹配连续空格

import pandas as pd
filename = r'data.txt'
df = pd.read_csv(
    filename,
    sep='\s+',  # 匹配任意数量的连续空白字符
    skiprows=2,  # 仅跳过表头和分隔线
    names=['Frequency / MHz', 'S2,1 [SPara1]/abs,dB'],
)

print(df)

方案二:使用delim_whitespace=True(更简洁)

import pandas as pd
filename = r'data.txt'
df = pd.read_csv(
    filename,
    delim_whitespace=True,  # 自动识别空白字符作为分隔符
    skiprows=2,
    names=['Frequency / MHz', 'S2,1 [SPara1]/abs,dB'],
)

print(df)

修改说明

  • 分隔符调整:替换sep="\t"为sep='\s+'或delim_whitespace=True,让Pandas正确识别多空格分隔的列。
  • 跳过行数修正:将skiprows=3改为skiprows=2,只跳过表头和分隔线,确保所有数据行都被读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:05:13