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
相关产品推荐
相关产品推荐

