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

Python pandas读取文本文件指定行与列问题求助

嘿,我来帮你看看问题出在哪!你的需求很明确,但代码里有几个小细节没处理好,导致拿不到目标DataFrame。咱们一步步来修正:

首先,最关键的问题:函数没有返回值

你在party_list()里定义了df1,但没在函数末尾加return df1,所以调用这个函数的时候,根本拿不到生成的DataFrame呀!这是新手常犯的小疏漏,一定要记得把函数内部的结果返回出来,外部才能访问到。

其次,列名的空格要精准匹配

你写的usecols=["President ", "Took office ","Left office ", "Party "]里每个列名后面都带空格,得确认你的presidents.txt里的表头是不是真的带这些空格!比如文件里的表头是President还是President ?如果列名不匹配,pandas会找不到对应列,要么返回空列,要么直接报错。

你可以先跑一行代码确认实际列名:

import pandas as pd
print(pd.read_table("presidents.txt", delimiter=",", nrows=0).columns)

根据输出调整usecols里的列名,确保和文件表头完全一致。

最后,精准提取35-44行

你的文件共44行,假设第1行是表头,第35到44行是需要的数据(共10行),这里有两种简单的实现方法:

方法1:读取时直接指定跳过的行和读取行数

适合不想加载整个文件的场景:

import pandas as pd

def party_list():
    # 根据实际列名调整这里的列表
    target_cols = ["President", "Took office", "Left office", "Party"]
    # 跳过表头后的前33行(对应原文件第2-34行),只读取后面10行(原文件35-44行)
    df1 = pd.read_table(
        "presidents.txt",
        delimiter=",",
        usecols=target_cols,
        skiprows=range(1, 34),  # 跳过DataFrame索引1到33的行(对应原文件第2-34行)
        nrows=10
    )
    return df1

# 调用函数获取结果
result_df = party_list()
print(result_df)

方法2:先读整个文件,再筛选行

因为你的文件只有44行,完全可以先读全部内容,再用iloc筛选行,这种方式更直观,不容易算错跳过的行数:

import pandas as pd

def party_list():
    target_cols = ["President", "Took office", "Left office", "Party"]
    # 读取整个文件的目标列
    full_df = pd.read_table("presidents.txt", delimiter=",", usecols=target_cols)
    # 原文件第35行对应DataFrame的行索引33,第44行对应索引42(iloc是左闭右开,所以取到43)
    df1 = full_df.iloc[33:43]
    return df1

result_df = party_list()
print(result_df)

调试小技巧

如果还是有问题,可以先读取整个文件看看结构,排查数据是否符合预期:

full_df = pd.read_table("presidents.txt", delimiter=",")
print(full_df.shape)  # 查看行数和列数
print(full_df.head())  # 查看前几行的列名和数据格式

这样调整后应该就能顺利拿到你要的df1啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:24:50