为什么Pandas中的列名分配优先于大写而不是小写?
例:
dframe = DataFrame({'city':['Alma','Brian Head', 'Fox Park'],
'altitude':[3158,3000,2762]})
返回一个DataFrame,其数据列的顺序为高度,城市。
鉴于:
dframe = DataFrame({'City':['Alma','Brian Head', 'Fox Park'],
'altitude':[3158,3000,2762]})
返回一个DataFrame,其中的数据列的顺序为City,altitude。
这是熊猫的特定行为还是一般的python行为?
python大神给出的解决方案
您实际上并没有提出这个问题,但是我假设存在一个隐式问题,即如何保留原始顺序?如果是这样,可以通过以下三种方式:
1)相同的基本字典构造函数,但包装在collections.OrderedDict
中(感谢@ shx2进行更正):
from collections import OrderedDict
df1 = pd.DataFrame( OrderedDict([ ('city',['Alma','Brian Head', 'Fox Park']),
('altitude',[3158,3000,2762]) ]))
2)非字典构造函数,您需要分别指定数据数组和列名,但是,这实际上需要以行为中心的条目,而不是像字典构造函数那样以列为中心:
lst = [['Alma','Brian Head','Fox Park'],
[3158,3000,2762]]
df2 = pd.DataFrame( map(list, zip(*lst)),
columns = ['city','altitude'] )
3)最简单的方法可能只是在创建数据框后指定顺序(感谢@EdChum来捕获原始帖子中的错误):
df3 = df[['city','altitude']]
测试所有三个结果是否相同:
In [149]: all(df1==df2)
Out[149]: True
In [150]: all(df1==df3)
Out[150]: True