以下文章来源于数据思践 ,作者王路情
这是我的第53篇原创文章,关于PDFMV框架。
阅读完本,你可以知道:
1 数据合并是什么
2 pandas的concat()方法使用
1
数据合并
数据合并是PDFMV框架中Data环节的重要操作之一。当我们为要解决的业务问题需要整合各方数据时,意味着需要进行数据合并处理了。数据合并的可以纵向合并,也可以横向合并,前者是按列拓展,生成长数据;后者是按行延伸,生成宽数据,也就是我们常说的宽表。
2
pandas的concat()方法
pandas库提供了concat()方法来完成数据的合并。
1.1 数据合并—纵向拓展
举例:
import numpy as np
import pandas as pd
# 定义数据(字典数据结构)
data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
data2 = {'Name':['Abhi', 'Ayushi', 'Dhiraj', 'Hitesh'],
'Age':[17, 14, 12, 52],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'],
'Qualification':['Btech', 'B.A', 'Bcom', 'B.hons']}
# 生成数据框
df = pd.DataFrame(data1,index=[0, 1, 2, 3])
df1 = pd.DataFrame(data2, index=[4, 5, 6, 7])
print(df, "\n\n", df1)
# 数据合并(合并两个数据框)
frames = [df, df1]
res1 = pd.concat(frames)
print(res1)
结果:
把创建的两个数据框按着纵向拓展生成了一个新的数据框。concat()方法,默认是纵向拓展。
1.2 数据合并—横向延伸
通过设置concat()方法如下参数:
例子1:
import pandas as pd
data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd'],
'Mobile No': [97, 91, 58, 76]}
data2 = {'Name':['Gaurav', 'Anuj', 'Dhiraj', 'Hitesh'],
'Age':[22, 32, 12, 52],
'Address':['Allahabad', 'Kannuaj', 'Allahabad', 'Kannuaj'],
'Qualification':['MCA', 'Phd', 'Bcom', 'B.hons'],
'Salary':[1000, 2000, 3000, 4000]}
# 把字典数据结构生成pandas的数据框类型
df = pd.DataFrame(data1,index=[0, 1, 2, 3])
df1 = pd.DataFrame(data2, index=[2, 3, 6, 7])
# 输出数据框结果
print(df, "\n\n", df1)
# 数据合并-横向延伸
# 横向拓展设置axis=1,内连接指定join='inner'或者外连接指定join='outer'(默认值)
res2 = pd.concat([df, df1], axis=1, join='inner')
res3 = pd.concat([df, df1], axis=1)
# 数据数据合并结果
print(res2, "\n\n", res3)
结果:
例子2
import pandas as pd
data1 = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Nagpur', 'Kanpur', 'Allahabad', 'Kannuaj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd'],
'Mobile No': [97, 91, 58, 76]}
data2 = {'Name':['Gaurav', 'Anuj', 'Dhiraj', 'Hitesh'],
'Age':[22, 32, 12, 52],
'Address':['Allahabad', 'Kannuaj', 'Allahabad', 'Kannuaj'],
'Qualification':['MCA', 'Phd', 'Bcom', 'B.hons'],
'Salary':[1000, 2000, 3000, 4000]}
# 把字典数据结构生成pandas的数据框类型
df = pd.DataFrame(data1,index=[0, 1, 2, 3])
df1 = pd.DataFrame(data2, index=[2, 3, 6, 7])
# 输出数据框结果
print(df, "\n\n", df1)
# 数据合并-横向延伸
# 横向拓展设置axis=1,指定索引设置join_axes
res4 = pd.concat([df, df1], axis=1, join_axes=[df.index])
res5 = pd.concat([df, df1], axis=1, join_axes=[df1.index])
# 数据数据合并结果
print(res4, "\n\n", res5)
结果:
关于concat()方法其它参数,可以查阅文档。该方法的参数集:
关于pandas的concat()方法,您有什么疑问或者想法请留言。