pd.concat' name' vs' keys'关键字

时间:2017-10-02 14:23:39

标签: pandas

我希望连接两个未命名的Series(他们未命名,因为我正在动态创建它们。)

我对此的第一次尝试如下:

In [41]: pd.concat([pd.Series([1,2,3]), pd.Series([4,5,6])],
       : names=['foo', 'bar'], axis=1)
Out[41]:
   0  1
0  1  4
1  2  5
2  3  6

我很惊讶这没有工作并阅读文档:

  

名称:列表,默认无

     

生成的分层索引中的级别名称

这对我来说并不是很重要。

我尝试了不太直观的keys关键字,这就是我认为names会做的事情:

In [46]: pd.concat([pd.Series([1,2,3]), pd.Series([4,5,6])],
       : keys=['foo', 'bar'], axis=1)
Out[46]:
   foo  bar
0    1    4
1    2    5
2    3    6

这里发生了什么?为什么我的列名由名为keys的关键字指定,而不是由关键字names指定?

1 个答案:

答案 0 :(得分:1)

Names - 使用names选项标记您创建的索引键。这为Hierarchical indexing或MultiIndex级别指定了名称。如果级别超过1,则实现名称,否则将忽略它们。

Keys - 使用keys选项在数据的最外层添加分层索引。传递一个系列时,将使用键设置索引。 (很像set index)。连接后,它们将转换为Dataframe,因此系列索引将在您的情况下设置为列名。

当您在不使用axis =1的情况下传递两者时,您可以看到标签的heirachial索引和添加heirarhial索引的平均值。

pd.concat([pd.Series([1,2,3]), pd.Series([4,5,6])], keys=['foo', 'bar'], names=['Nice', 'TOO'])
Nice  TOO
foo   0      1
      1      2
      2      3
bar   0      4
      1      5
      2      6
dtype: int64

正如您所看到的,level由names参数命名,其中index由keys参数设置。