Pandas 合并数据
来源:互联网 发布:网络信息安全口号 编辑:程序博客网 时间:2024/06/05 05:39
- concat
- axis
- ignore_index 重置 index
- join 合并方式
- join_axes 依照 axes 合并
- append 添加数据
- merge
- 依据共同的一列进行合并
- 依据两组key合并
- Indicator
- 依据index合并
- 解决overlapping的问题
concat
先定义下资料集
import pandas as pdimport numpy as npdf1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])printf df1# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0print df2# 0 1.0 1.0 1.0 1.0# 1 1.0 1.0 1.0 1.0# 2 1.0 1.0 1.0 1.0print df3# 0 2.0 2.0 2.0 2.0# 1 2.0 2.0 2.0 2.0# 2 2.0 2.0 2.0 2.0
axis
axis=0
代表上下的方向,axis=1
代表左右。
res = pd.concat([df1, df2, df3], axis=0)#打印结果print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 0 1.0 1.0 1.0 1.0# 1 1.0 1.0 1.0 1.0# 2 1.0 1.0 1.0 1.0# 0 2.0 2.0 2.0 2.0# 1 2.0 2.0 2.0 2.0# 2 2.0 2.0 2.0 2.0
ignore_index (重置 index)
#承上一个例子,并将index_ignore设定为Trueres = pd.concat([df1, df2, df3], axis=0, ignore_index=True)#打印结果print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 1.0 1.0 1.0# 4 1.0 1.0 1.0 1.0# 5 1.0 1.0 1.0 1.0# 6 2.0 2.0 2.0 2.0# 7 2.0 2.0 2.0 2.0# 8 2.0 2.0 2.0 2.0
结果的index变0, 1, 2, 3, 4, 5, 6, 7, 8。
join (合并方式)
join=’outer’为预设值,因此未设定任何参数时,函数默认join=’outer’。此方式是依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。
#纵向"外"合并df1与df2res = pd.concat([df1, df2], axis=0, join='outer')print(res)# a b c d e# 1 0.0 0.0 0.0 0.0 NaN# 2 0.0 0.0 0.0 0.0 NaN# 3 0.0 0.0 0.0 0.0 NaN# 2 NaN 1.0 1.0 1.0 1.0# 3 NaN 1.0 1.0 1.0 1.0# 4 NaN 1.0 1.0 1.0 1.0
当join='inner'
时,
#纵向"内"合并df1与df2res = pd.concat([df1, df2], axis=0, join='inner', ignore_index=True)print(res)# b c d# 0 0.0 0.0 0.0# 1 0.0 0.0 0.0# 2 0.0 0.0 0.0# 3 1.0 1.0 1.0# 4 1.0 1.0 1.0# 5 1.0 1.0 1.0
可以类比数据库中的内联接和外联接
join_axes (依照 axes 合并)
#依照`df1.index`进行横向合并res = pd.concat([df1, df2], axis=1, join_axes=[df1.index])#打印结果print(res)# a b c d b c d e# 1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN# 2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0# 3 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0#移除join_axes,并打印结果res = pd.concat([df1, df2], axis=1)print(res)# a b c d b c d e# 1 0.0 0.0 0.0 0.0 NaN NaN NaN NaN# 2 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0# 3 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0# 4 NaN NaN NaN NaN 1.0 1.0 1.0 1.0
join_axes=[df1.index]
使横向合并时,以df1的索引为基准进行合并。
append (添加数据)
append只有纵向合并,没有横向合并。
#将df2合并到df1的下面,以及重置index,并打印出结果res = df1.append(df2, ignore_index=True)print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 1.0 1.0 1.0# 4 1.0 1.0 1.0 1.0# 5 1.0 1.0 1.0 1.0#合并多个df,将df2与df3合并至df1的下面,以及重置index,并打印出结果res = df1.append([df2, df3], ignore_index=True)print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 1.0 1.0 1.0# 4 1.0 1.0 1.0 1.0# 5 1.0 1.0 1.0 1.0# 6 1.0 1.0 1.0 1.0# 7 1.0 1.0 1.0 1.0# 8 1.0 1.0 1.0 1.0#合并series,将s1合并至df1,以及重置index,并打印出结果res = df1.append(s1, ignore_index=True)print(res)# a b c d# 0 0.0 0.0 0.0 0.0# 1 0.0 0.0 0.0 0.0# 2 0.0 0.0 0.0 0.0# 3 1.0 2.0 3.0 4.0
merge
merge
很像数据库中的联接。
依据共同的一列进行合并
import pandas as pdimport numpy as np#定义资料集并打印出left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})print left# A B key# 0 A0 B0 K0# 1 A1 B1 K1# 2 A2 B2 K2# 3 A3 B3 K3print right# C D key# 0 C0 D0 K0# 1 C1 D1 K1# 2 C2 D2 K2# 3 C3 D3 K3#依据key column合并,并打印出res = pd.merge(left, right, on='key')print(res) A B key C D# 0 A0 B0 K0 C0 D0# 1 A1 B1 K1 C1 D1# 2 A2 B2 K2 C2 D2# 3 A3 B3 K3 C3 D3
属性on
来表明依据某一行。
依据两组key合并
import pandas as pd#定义资料集并打印出left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})print(left)# A B key1 key2# 0 A0 B0 K0 K0# 1 A1 B1 K0 K1# 2 A2 B2 K1 K0# 3 A3 B3 K2 K1print(right)# C D key1 key2# 0 C0 D0 K0 K0# 1 C1 D1 K1 K0# 2 C2 D2 K1 K0# 3 C3 D3 K2 K0#依据key1与key2 columns进行合并,并打印出四种结果['left', 'right', 'outer', 'inner']res = pd.merge(left, right, on=['key1', 'key2'], how='inner')print(res)# A B key1 key2 C D# 0 A0 B0 K0 K0 C0 D0# 1 A2 B2 K1 K0 C1 D1# 2 A2 B2 K1 K0 C2 D2res = pd.merge(left, right, on=['key1', 'key2'], how='outer')print(res)# A B key1 key2 C D# 0 A0 B0 K0 K0 C0 D0# 1 A1 B1 K0 K1 NaN NaN# 2 A2 B2 K1 K0 C1 D1# 3 A2 B2 K1 K0 C2 D2# 4 A3 B3 K2 K1 NaN NaN# 5 NaN NaN K2 K0 C3 D3res = pd.merge(left, right, on=['key1', 'key2'], how='left')print(res)# A B key1 key2 C D# 0 A0 B0 K0 K0 C0 D0# 1 A1 B1 K0 K1 NaN NaN# 2 A2 B2 K1 K0 C1 D1# 3 A2 B2 K1 K0 C2 D2# 4 A3 B3 K2 K1 NaN NaNres = pd.merge(left, right, on=['key1', 'key2'], how='right')print(res)# A B key1 key2 C D# 0 A0 B0 K0 K0 C0 D0# 1 A2 B2 K1 K0 C1 D1# 2 A2 B2 K1 K0 C2 D2# 3 NaN NaN K2 K0 C3 D3
how
属性有四种值,默认方式是inner
。当使用outter
时空值用NaN
填充。how='left'
表示左外联接,how='right'
同理。
Indicator
indicator=True
会将合并的方式作为新的一列。
import pandas as pd#定义资料集并打印出df1 = pd.DataFrame({'col1':[0,1], 'col_left':['a','b']})df2 = pd.DataFrame({'col1':[1,2,2],'col_right':[2,2,2]})print(df1)# col1 col_left# 0 0 a# 1 1 bprint(df2)# col1 col_right# 0 1 2# 1 2 2# 2 2 2# 依据col1进行合并,并启用indicator=True,最后打印出res = pd.merge(df1, df2, on='col1', how='outer', indicator=True)print(res)# col1 col_left col_right _merge# 0 0.0 a NaN left_only# 1 1.0 b 2.0 both# 2 2.0 NaN 2.0 right_only# 3 2.0 NaN 2.0 right_only# 自定indicator column的名称,并打印出res = pd.merge(df1, df2, on='col1', how='outer', indicator='indicator_column')print(res)# col1 col_left col_right indicator_column# 0 0.0 a NaN left_only# 1 1.0 b 2.0 both# 2 2.0 NaN 2.0 right_only# 3 2.0 NaN 2.0 right_only
left_only
表示只有左边的列表有值,right_only
同理。
依据index合并
import pandas as pd#定义资料集并打印出left = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2']}, index=['K0', 'K1', 'K2'])right = pd.DataFrame({'C': ['C0', 'C2', 'C3'], 'D': ['D0', 'D2', 'D3']}, index=['K0', 'K2', 'K3'])print(left)# A B# K0 A0 B0# K1 A1 B1# K2 A2 B2print(right)# C D# K0 C0 D0# K2 C2 D2# K3 C3 D3#依据左右资料集的index进行合并,how='outer',并打印出res = pd.merge(left, right, left_index=True, right_index=True, how='outer')print(res)# A B C D# K0 A0 B0 C0 D0# K1 A1 B1 NaN NaN# K2 A2 B2 C2 D2# K3 NaN NaN C3 D3#依据左右资料集的index进行合并,how='inner',并打印出res = pd.merge(left, right, left_index=True, right_index=True, how='inner')print(res)# A B C D# K0 A0 B0 C0 D0# K2 A2 B2 C2 D2
解决overlapping的问题
import pandas as pd#定义资料集boys = pd.DataFrame({'k': ['K0', 'K1', 'K2'], 'age': [1, 2, 3]})girls = pd.DataFrame({'k': ['K0', 'K0', 'K3'], 'age': [4, 5, 6]})#使用suffixes解决overlapping的问题res = pd.merge(boys, girls, on='k', suffixes=['_boy', '_girl'], how='inner')print(res)# age_boy k age_girl# 0 1 K0 4# 1 1 K0 5
什么意思呢?就是说当两个DataFrame有一个以上相同的属性时,我们按照其中的一个属性来marge,另外的属性为了防止出现重名的情况,我们加个后缀来区分。suffixes就是后缀的意思。
0 0
- Pandas 合并数据集
- Pandas 合并数据集
- Pandas 合并数据
- pandas数据合并
- Pandas 合并数据
- pandas数据合并
- pandas数据加载与合并
- PANDAS 数据合并 merge/join
- pandas数据重塑与合并
- pandas小记:pandas数据规整化-分组合并及重塑
- Python pandas数据库风格的数据合并
- pandas数据合并与重塑---concat方法
- 利用 Python 进行数据分析(十二)pandas:数据合并
- 利用 Python 进行数据分析(十二)pandas:数据合并
- 利用Python进行数据分析(12) pandas基础: 数据合并
- 【pandas】[3] DataFrame 数据合并,连接(merge,join,concat)
- pandas学习03--数据合并之纵向横向
- PANDAS 数据合并与重塑(concat篇)
- java 流
- 2017大数据领域十大必读书籍
- 给科研路上的自己
- 采集网站特殊文件Meta信息
- Maven下载、安装和配置(二)
- Pandas 合并数据
- 51nod 1062 序列中最大的数
- .net环境变量设置||'csc' 不是内部或外部命令
- 集合
- 使用MyBatis Generator 自动生成代码
- ReactNative开源组件
- nginx单点问题
- SQL语言笔记——基本命令
- 算法提高