连接2个数据帧,长度不均匀,没有索引

时间:2014-01-09 13:14:44

标签: python pandas

如何连接长度不均匀且没有索引的2个数据帧

y=[152,176,160,192,220,272,256,280,300,280,312,328]
df= pd.DataFrame({'a':y})

z=[np.nan, np.nan,176.,195.84, 217.8816, 241.242,   272.1758,
  292.7523,  313.2483,  332.8503,  341.3608,  352.8076,  363.6765,  360.4414,
  379.522]

df2=pd.DataFrame({'b':z})

我希望输出为

           b   a
0        NaN   152
1        NaN   176
2   176.0000   160
3   195.8400   192
4   217.8816   220
5   241.2420   272
6   272.1758   256
7   292.7523   280
8   313.2483   300
9   332.8503   280
10  341.3608   312
11  352.8076   328
12  363.6765
13  360.4414
14  379.5220

[15 rows x 2 columns]

2 个答案:

答案 0 :(得分:2)

每个pandas DataFrame都有一个索引,即使您没有明确指定它。在这种情况下,索引由0到n的整数组成:

>>> df.index
Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype=int64)

因此,如果DataFrame的顺序正确,您只需使用concat即可:

pd.concat([df2, df], axis=1)

返回:

           b    a
0        NaN  152
1        NaN  176
2   176.0000  160
3   195.8400  192
4   217.8816  220
5   241.2420  272
6   272.1758  256
7   292.7523  280
8   313.2483  300
9   332.8503  280
10  341.3608  312
11  352.8076  328
12  363.6765  NaN
13  360.4414  NaN
14  379.5220  NaN

答案 1 :(得分:1)

我认为首先制作单独的DataFrame没有任何好处。我无法想到在一行中做到这一点的方法,但你可以在两个方面做到这一点:

In [64]: df = DataFrame([y, z]).T

In [65]: df.columns = ['a', 'b']

In [66]: df
Out[66]:
      a         b
0   152       NaN
1   176       NaN
2   160  176.0000
3   192  195.8400
4   220  217.8816
5   272  241.2420
6   256  272.1758
7   280  292.7523
8   300  313.2483
9   280  332.8503
10  312  341.3608
11  328  352.8076
12  NaN  363.6765
13  NaN  360.4414
14  NaN  379.5220

[15 rows x 2 columns]