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的执行顺序是:
- 读取原始表头行
- 用
names替换所有列名 - 按
usecols列表匹配新列名
此时usecols中的原列名不存在于新列名集合中,因此触发ValueError。而usecols的函数形式会在列名替换前执行,避免了匹配冲突。
内容的提问来源于stack exchange,提问作者silence_of_the_lambdas
相关产品推荐
相关产品推荐

