如何通过列标题名称读取Excel指定列至DataFrame?
解决pandas read_excel通过列名指定读取列的问题
我明白你的困扰——用read_csv可以直接通过列名列表指定要读取的列,但read_excel这么做却返回空DataFrame,确实有点坑。这其实和pandas的版本以及usecols参数的历史行为有关,下面给你两种可行的解决方案:
方案1:升级pandas到较新版本
从pandas 0.24.0版本开始,read_excel的usecols参数已经支持直接传入字符串列名列表了。如果你能升级pandas,那你原来的代码就能正常工作:
import pandas as pd # 直接传入列名列表即可 xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols=['ForeignKey'])
方案2:用筛选函数兼容旧版本
如果暂时不能升级pandas,你可以给usecols传入一个lambda函数来筛选列名,这样在旧版本中也能生效:
import pandas as pd # 用lambda函数匹配目标列名 xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols=lambda x: x == 'ForeignKey')
如果需要同时读取多个列,只需要修改lambda的判断条件即可:
# 读取number和ForeignKey两列 xl_file = pd.read_excel('D:/SnapPython/TestDF.xlsx', sheet_name='Sheet 2', usecols=lambda x: x in ['number', 'ForeignKey'])
额外注意点
- 确保你传入的列名和Excel中Sheet2的列标题完全一致,包括大小写、空格等(比如Excel里如果是
Foreign Key,你写ForeignKey就会匹配失败)。 - 旧版本pandas中
usecols只支持整数索引列表或筛选函数,这就是你直接传字符串列表返回空DataFrame的原因。
内容的提问来源于stack exchange,提问作者Fadri
相关产品推荐
相关产品推荐

