【问题标题】:Uppercase precedence in pandas column name assignment熊猫列名分配中的大写优先级
【发布时间】:2015-05-31 09:39:38
【问题描述】:

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 行为。您可以尝试使用这些名称对列表进行排序以查看它。

标签: python pandas


【解决方案1】:

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

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

【讨论】:

  • 最后一个不会重命名列而不是重新排序吗?你想让df.ix[:, ['city','altitude']]重新排序
  • 或者你可以做df = df[['city','altitude']]
  • 是的,第二种方式是我原本打算做的。现已修复,非常感谢!
  • 在创建 OrderedDict 时传递一个 dict 超出了 OrderedDict 的目的...
  • @shx2 现已修复,非常感谢您的更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多