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

Pandas读取CSV时,如何基于原列名选列并重命名所选列?

解决方案:Pandas读取时基于原列名选列并重命名

可以在读取CSV/Excel时直接完成「按原列名选列+重命名所选列」的操作,以下是两种可行方法:

方法1:利用usecols函数形式匹配原列名

usecols的函数参数会作用于原始表头列名(而非names指定的新列名),因此可以先按原列名筛选子集,再用names重命名:

import pandas as pd

df = pd.read_csv(
    'test_read_csv.csv',
    usecols=lambda col: col in ['Col1', 'Col3'],  # 基于原列名筛选
    names=['first', 'third'],                     # 重命名所选列
    header=0                                      # 跳过原始表头行
)

效果验证

输出的DataFrame包含first、third两列,对应原CSV中Col1、Col3的数据,无匹配错误。此方法同样适用于pd.read_excel()。

方法2:链式调用rename(逻辑更直观)

先通过usecols按原列名筛选,再直接链式调用rename完成重命名,一步到位:

col_mapping = {'Col1': 'first', 'Col3': 'third'}

df = pd.read_csv(
    'test_read_csv.csv',
    usecols=col_mapping.keys()  # 按原列名选列
).rename(columns=col_mapping)   # 重命名所选列

原报错原因说明

当你使用usecols=[原列名] + names=[新列名]时,Pandas的执行顺序是:

  1. 读取原始表头行
  2. 用names替换所有列名
  3. 按usecols列表匹配新列名

此时usecols中的原列名不存在于新列名集合中,因此触发ValueError。而usecols的函数形式会在列名替换前执行,避免了匹配冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:43:15