Pandas DataFrame .ix方法的行为

时间:2016-01-28 15:58:41

标签: python pandas

这里有两个数据框,我希望按列顺序连接在一起。

>>> df1 = pd.DataFrame({'letters' : ['a', 'b', 'c'], 'numbers' : [1, 2, 3]})
>>> df2 = pd.DataFrame({'Cities' : ['Rome', 'Venice'], 'floats' : [1.1 , 2.2]})

>>> df1
  letters  numbers
0       a        1
1       b        2
2       c        3

>>> df2
   Cities  floats
0    Rome     1.1
1  Venice     2.2

行数不匹配。我想附加第二行的副本(可以是任意行),所以我尝试了这个......

>>> df2.ix[[0, 1, 1]]
   Cities  floats
0    Rome     1.1
1  Venice     2.2
1  Venice     2.2

当连接2个数据帧时,我得到一个ValueError ...

pd.concat([df1, df2.ix[[0, 1, 1]]], axis = 1)
ValueError: Shape of passed values is (4, 6), indices imply (4, 4)

我尝试使用复制行制作表的新副本但没有用...

pd.concat([df1, df2.ix[[0, 1, 1]]].copy(), axis = 1)
ValueError: Shape of passed values is (4, 6), indices imply (4, 4)

这更像是一个人为理解的例子而非实际问题,因为这个前提有点愚蠢。我仍然希望得到一个正确的答案,但预期的结果是......

  letters  numbers  Cities  floats
0       a        1    Rome     1.1
1       b        2  Venice     2.2
2       c        3  Venice     2.2

1 个答案:

答案 0 :(得分:2)

pd.concat根据DataFrames的索引对齐行。由于df2.ix[...]有两行具有相同的索引,pd.concat不会将第二个“Venice”行放在索引为2的行上。要重新编号索引,请在连续之前调用reset_index()

In [102]: pd.concat([df1, df2.iloc[[0, 1, 1]].reset_index()], axis=1)
Out[102]: 
  letters  numbers  index  Cities  floats
0       a        1      0    Rome     1.1
1       b        2      1  Venice     2.2
2       c        3      1  Venice     2.2