Pandas中DataFrame列名顺序为何不符合预期?(Python3.6/Pandas0.23)
为什么DataFrame的列顺序和预期不一致?
嘿,这个问题我刚接触Pandas的时候也踩过坑!原因其实出在你定义列名用的数据结构上:
- 你用了集合(set)
{'a', 'b', 'c'}来指定columns参数,但集合在Python 3.6及更早版本里是无序的——它不会保存你输入元素时的顺序,每次遍历集合的元素顺序都是随机的,所以Pandas读取这个集合作为列名时,自然就不是你想要的a、b、c顺序了。 - 补充个小知识点:Python 3.7及以后的版本里,集合开始支持保留插入顺序,但你的环境是Python 3.6,所以完全享受不到这个特性,还是会出现列顺序混乱的情况。
解决办法
把集合改成有序的数据结构就行,比如列表(list)或者元组(tuple):
import pandas as pd import numpy as np # 用列表指定列顺序(推荐) df = pd.DataFrame(data=np.random.random(size=(5,3)), columns=['a', 'b', 'c']) # 或者用元组 # df = pd.DataFrame(data=np.random.random(size=(5,3)), columns=('a', 'b', 'c')) print(df.columns) # 输出 Index(['a', 'b', 'c'], dtype='object'),完全符合预期
这样就能严格按照你定义的顺序生成DataFrame的列啦!
内容的提问来源于stack exchange,提问作者Arnold Klein
相关产品推荐
相关产品推荐

