如何在Pandas DataFrame中使用数字及特殊格式列名访问数据
解决Pandas中访问数字/带点列名的问题
我懂你遇到的这个麻烦——当Excel里的列名是纯数字(比如2008)或者像'2008.1'这种带点的字符串时,Pandas的点语法确实会直接失效,这本质是因为Python的标识符规则不允许以数字开头,也不能把.作为属性名的一部分(点语法本质是访问对象的属性,属性名得符合Python标识符规范)。
不用修改原始Excel列名也能轻松解决,直接用方括号索引就可以,这是访问这类特殊列名的标准操作方式:
正确的访问代码示例
针对纯数字列名
2008:data_2008 = subset_by_provider[2008].tolist()这里要注意:如果通过
subset_by_provider.columns查看后,发现列名是字符串类型(比如'2008'),就改成字符串索引:subset_by_provider['2008'].tolist()。针对带点的列名
'2008.1':data_2008_1 = subset_by_provider['2008.1'].tolist()不管这个列名在索引里是什么类型,用字符串形式放在方括号里都能稳定访问。
为什么点语法行不通?
点语法df.column_name对column_name有严格要求:
- 不能以数字开头(所以
df.2008直接触发语法错误) - 不能包含
.、空格、特殊字符等(df.'2008.1'本身语法就不对,就算去掉引号写成df.2008.1,Python会把它解析成访问df.2008对象的.1属性,完全偏离你的需求)
所以遇到这类特殊列名,方括号索引是最稳妥的选择,完全不需要改动原始Excel文件。
内容的提问来源于stack exchange,提问作者Erich Purpur
相关产品推荐
相关产品推荐

