使用pd.concat(x,y)

时间:2019-06-01 02:47:13

标签: python python-3.x pandas concatenation

我有一个数据集x和y。 x是一个适用于所有y数据的列表。我希望使用pd.concat([pd.Series(x),pd.DataFrame(y)], axis=1)达到以下目标:

x1   y1   ya
x2   y2   yb
x3   y3   yc
x4   y4   yd
x5   y5   ye
x6   y6   yf
  • x包含x1,x2,x3,x4,x5,x6。
  • y包含[y1,y2,y3,y4,y5,y6],[ya,yb,yc,yd,ye,yf]。
  • x和y在pandas DataFrame中。

运行pd.concat([pd.Series(x),pd.DataFrame(y)], axis=1)pd.concat([pd.DataFrame(x),pd.DataFrame(y)], axis=1)会导致以下结果

x1   Nan   Nan
x2   Nan   Nan
x3   y1   ya
x4   y2   yb
x5   y3   yc
x6   y4   yd
     y5   ye
     y6   yf

因此,代码y值向两个单元格移动到axis=0方向。我在此DataFrame中有索引。我已经删除了索引。没有观察到差异。

仅当我将x和y连接在一起时,才观察到此偏移。

如何将y值向上移动两个?

谢谢!

1 个答案:

答案 0 :(得分:1)

当2系列的索引未对齐时,会发生这种情况。重置索引(reset_index(drop=True)之后再试一次,以便系列或数据框的索引都对齐:

pd.concat([pd.Series(x).reset_index(drop=True),pd.DataFrame(y)
               .reset_index(drop=True)], axis=1)

或者:

pd.concat([pd.DataFrame(x).reset_index(drop=True),pd.DataFrame(y)
                              .reset_index(drop=True)],axis=1)

添加示例:

s1=pd.Series([1,2,3]) #normal indexed
s2=pd.Series([4,5,6],index=[2,3,4]) #index starts from 2

axis=1上正常连接

pd.concat([s1,s2],axis=1)

     0    1
0  1.0  NaN
1  2.0  NaN
2  3.0  4.0
3  NaN  5.0
4  NaN  6.0

reset_index()

保持联系
pd.concat([s1.reset_index(drop=True),s2.reset_index(drop=True)],axis=1)

   0  1
0  1  4
1  2  5
2  3  6