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

使用Pandas读取.txt文件时仅返回NaNs的问题求助

解决Pandas读取TXT文件返回全NaN的问题

根据你提供的文件内容,这是**固定宽度格式(Fixed-Width)**的文本,并非制表符或单一空格分隔的CSV,因此sep="\t"无法正确识别列,导致返回全NaN。以下是几种可行的解决方法:

方法1:用pd.read_fwf()读取固定宽度文件

这是适配这类文件的最优方案,Pandas专门提供了读取固定宽度格式的函数:

import pandas as pd

# Pandas会自动推断列宽,直接读取
df = pd.read_fwf('s3://filepath', encoding='latin-1')

如果自动推断列宽不准确,可手动指定每列的起始/结束位置(根据实际文本的字符位置调整):

# 示例列位置定义,需根据你的文件实际列宽修改
colspecs = [(0, 9), (10, 19), (20, 22), (23, 68), (69, 76), (77, 83), (84, 95), (96, 107), (108, 113), (114, 119), (120, 121)]
df = pd.read_fwf('s3://filepath', encoding='latin-1', colspecs=colspecs)

方法2:用正则表达式匹配任意数量空格作为分隔符

若不想用read_fwf,可在read_csv中设置分隔符为任意数量的空白字符:

import pandas as pd

df = pd.read_csv('s3://filepath', encoding='latin-1', sep=r'\s+')

注意:如果某列内容本身包含空格(比如示例中的Vacant Land Agricultural/Horticultural/Forest Vacant Land),此方法会将该列拆分为多列,这种场景下优先选择read_fwf。

方法3:手动清洗文本后再读取

如果上述方法仍有问题,可先读取文本并统一分隔符,再转为DataFrame:

import pandas as pd
from io import StringIO

# 读取文件内容
with open('s3://filepath', 'r', encoding='latin-1') as f:
    lines = f.readlines()

# 将连续多空格替换为单个制表符,清洗文本
cleaned_lines = []
for line in lines:
    # 先把多空格替换成单个制表符,再去除首尾空白
    cleaned_line = ' '.join(line.split()).replace(' ', '\t').strip()
    cleaned_lines.append(cleaned_line)

# 转为DataFrame
df = pd.read_csv(StringIO('\n'.join(cleaned_lines)), sep='\t')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:25:19