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

如何用Pandas读取存在异常行的CSV文件的最后n列?

提取CSV每行最后n个单元格的Pandas解决方案

针对你遇到的CSV行长度不一致,需要提取每行最后n个存在的单元格的问题,可以通过以下方法实现:

方法一:读取后按行截取末尾n个元素

先完整读取CSV文件,再对每行从末尾截取n个元素,最后匹配对应的表头:

import pandas as pd

# 读取CSV文件,指定表头为第一行,用str类型避免自动类型转换导致的问题
df = pd.read_csv("your_file.csv", header=0, dtype=str)

n = 3  # 要提取的最后n个单元格数量
# 对每行截取最后n个元素
result_df = df.apply(lambda row: row.iloc[-n:], axis=1)
# 将结果的列名设置为原表头的最后n个
result_df.columns = df.columns[-n:]

print(result_df)

运行后会得到你期望的结果:

Col3 Col4 Col5
0   a3   a4   a5
1   b3   b4   b5
2   c3   c4   c5
3   d3   d4   d5

为什么usecols不适用?

你之前用usecols=[2,3,4]会出现NaN,是因为Pandas读取CSV时,会按顺序将每行的元素填充到对应的列中。当某行的元素数量少于表头列数时,后面的列会被填充NaN,而前面的元素依然对应最左侧的列,导致你选取的固定列索引会拿到错位的数据。而通过row.iloc[-n:]截取每行末尾的n个元素,不管前面有多少缺失,都能准确拿到每行最右侧的有效数据。

方法二:无表头读取后处理(更严谨)

如果担心表头行和数据行的长度差异影响读取,可以先不指定表头,处理后再设置:

import pandas as pd

# 读取所有内容,不设置表头
temp_df = pd.read_csv("your_file.csv", header=None, dtype=str)
# 提取第一行作为表头
header = temp_df.iloc[0]
# 提取数据行
data = temp_df.iloc[1:]

n = 3
# 对每行先去除NaN,再截取最后n个元素(确保只取存在的单元格)
result_df = data.apply(lambda row: row.dropna().iloc[-n:], axis=1)
# 设置列名为原表头的最后n个
result_df.columns = header[-n:]
# 重置索引
result_df = result_df.reset_index(drop=True)

print(result_df)

这个方法适合更复杂的行长度不一致场景,确保只提取每行实际存在的最后n个单元格。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:00:57