pandas列名称赋值中的大写优先级

Joh*_*ohn 2 python pandas

Pandas中的列名分配是否有理由支持大写而不是小写?

例:

dframe = DataFrame({'city':['Alma','Brian Head', 'Fox Park'],
                    'altitude':[3158,3000,2762]})
Run Code Online (Sandbox Code Playgroud)

返回一个DataFrame,其中包含订单高度,城市中的列.

鉴于:

dframe = DataFrame({'City':['Alma','Brian Head', 'Fox Park'],
                    'altitude':[3158,3000,2762]})
Run Code Online (Sandbox Code Playgroud)

返回一个DataFrame,其中包含City,altitude的顺序列.

这是大熊猫特有的或一般的python行为吗?

Joh*_*hnE 5

你实际上并没有问这个,但我假设有一个关于如何保留原始排序的隐含问题?如果是这样,有以下三种方式:

1)相同的基本字典构造函数,但是换行collections.OrderedDict(感谢@ shx2进行更正):

from collections import OrderedDict
df1 = pd.DataFrame( OrderedDict([ ('city',['Alma','Brian Head', 'Fox Park']),
                                  ('altitude',[3158,3000,2762]) ]))
Run Code Online (Sandbox Code Playgroud)

2)非字典构造函数,您可以分别指定数据数组和列名,但是,这实际上需要以行为中心的条目,而不是像字典构造函数那样以列为中心:

lst = [['Alma','Brian Head','Fox Park'],
       [3158,3000,2762]]
df2 = pd.DataFrame( map(list, zip(*lst)),
                    columns = ['city','altitude'] )
Run Code Online (Sandbox Code Playgroud)

3)最简单的方法可能就是在创建数据帧后指定顺序(感谢@EdChum捕获原始帖子中的错误):

df3 = df[['city','altitude']]
Run Code Online (Sandbox Code Playgroud)

测试所有三个结果是相同的:

In [149]: all(df1==df2)
Out[149]: True

In [150]: all(df1==df3)
Out[150]: True
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以做`df = df [['city','altitude']]` (2认同)
  • 在创建`OrderedDict`时传递一个字典击败了'OrderedDict`的目的...... (2认同)