如何用Pandas从固定列读取Excel至最后非空列?
自动读取Excel指定行从固定列到最后非空列的方案
方法一:不修改Excel,自动识别最后非空列
先读取目标行的全部数据,定位最后一个非空列的位置,再按需读取:
- 读取第一行所有数据(仅一行),获取完整的行数据
import pandas as pd from openpyxl.utils import get_column_letter, column_index_from_string # 先读取第一行全部内容 temp_df = pd.read_excel("your_file.xlsx", header=None, nrows=1) # 确定起始列F对应的索引(pandas列索引从0开始) start_col_idx = column_index_from_string("F") - 1 # 从起始列开始,找到最后一个非空值的列索引 row_data = temp_df.iloc[0, start_col_idx:] last_non_empty_idx = row_data.last_valid_index() # 转换为Excel列名格式 start_col = "F" end_col = get_column_letter(last_non_empty_idx + 1) # 转成1-based列号匹配Excel格式 # 最终读取指定范围 final_df = pd.read_excel("your_file.xlsx", header=None, nrows=1, usecols=f"{start_col}:{end_col}")
方法二:修改Excel标记结束列,精准定位
如果允许修改Excel,可在目标行的最后一列右侧输入特殊标记(比如END),然后读取到标记列之前:
- 在Excel中,找到目标行(第一行),在最后一个有效列的右侧单元格输入
END - 用代码定位标记位置并读取:
import pandas as pd from openpyxl.utils import column_index_from_string, get_column_letter # 读取第一行全部内容 temp_df = pd.read_excel("your_file.xlsx", header=None, nrows=1) # 起始列F的索引(pandas 0-based) start_col_idx = column_index_from_string("F") - 1 # 找到标记"END"所在的列索引 end_marker_idx = temp_df.iloc[0, start_col_idx:].tolist().index("END") + start_col_idx # 计算实际需要读取的最后一列(标记列的前一列) actual_end_col_idx = end_marker_idx - 1 end_col = get_column_letter(actual_end_col_idx + 1) # 读取指定范围 final_df = pd.read_excel("your_file.xlsx", header=None, nrows=1, usecols=f"F:{end_col}")
注意事项
- 上述代码兼容pandas 1.3.4版本,
last_valid_index()和read_excel的参数在该版本中均可用 - 如果Excel存在合并单元格,需提前处理,避免干扰非空列的判断
内容的提问来源于stack exchange,提问作者Or b
相关产品推荐
相关产品推荐

