将多个Series对象合并成一个DataFrame对象

问题描述:

将多个列合并成一个表,也就是将多个Series对象合并成一个DataFrame对象,本文章着重讲解多列合并。

主要推荐的函数有pd.concat()
和pd.DataFrame(list(zip(s1, s2, s3)))

接下来是详细讲解

首先介绍pd.contact()函数

首先创建两个Series对象为例

首先要提醒的是,DataFrame对象的每一列都可以看做是一个Series对象
换句话说,DataFrame对象可以看做是多个Series对象拼接而成

s1(注:第一列的数字是索引)

s2(注:第一列的数字是索引)

concat()函数里面有两个常用的参数axis 和ignore_index, 默认值分别为axis=0, ignore_index=False, axis=0表示行拼接,axis=1表示列拼接

1. 首先尝试直接对s1和s2使用pd.concat([s1, s2], axis=0, ignore_index=False)

会发现这样会直接把s1和s2进行简单的行拼接

2. 对s1和s2使用pd.concat([s1, s2], axis=1, ignore_index=False)


结果是把s1和s2中具有相同索引的值进行了拼接, 最后的结果变成了一个具有两列的DataFrame对象

3. 对s1和s2使用pd.concat([s1, s2], axis=1, ignore_index=True)

结果和上面的一样

4. 对s1和s2使用pd.concat([s1, s2], axis=0, ignore_index=True)


现在就可以发现ignore_index = True 的作用了,他就是在进行 行拼接的可以忽略原先二者的索引值,然后重新构建索引
我们也可以对比3和4发现,在进行列拼接的时候,ignore_index 是不生效的

那如何拼接两个索引值不同的列呢

下面介绍两个方法

解决拼接两个索引值不同的列的方法:

方法一

出现上述问题的根本原因还是两个列的索引值不同

第一个方法就是把两个列的索引值都改成一样

s1.reset_index(drop=True, inplace=True)
s2.reset_index(drop=True, inplace=True)

这样就可以把两列的索引值都去掉,或者说是都设置为初试默认值0,1,2…
这样再使用,就可以进行拼接了

方法二

pd.DataFrame(list(zip(s1, s2)))


zip()里面也可以放3个列及以上的列

这个方法也可以直接忽略两列不同的索引值

来源:zrz0258

物联沃分享整理
物联沃-IOTWORD物联网 » 将多个Series对象合并成一个DataFrame对象

发表评论