python数据处理----数据合并

连接数据

加载多份数据连接

# 读取数据
df1 = pd.read_csv('../data/concat_1.csv')
df2 = pd.read_csv('../data/concat_2.csv')
df3 = pd.read_csv('../data/concat_3.csv')
print(df1)
print(df2)
print(df3)

在这里插入图片描述

# 连接数据  concat([数据1,数据2])方法
row_concat = pd.concat([df1,df2,df3])

在这里插入图片描述

DataFrame和Series连接:

Series是列数据,concat方法默认是添加行,由于Series数据没有行索引,所以添加了一个新列,缺失的数据用NaN填充

new_series = pd.Series(['n1','n2','n3','n4'])
row_concat = pd.concat([df1,new_series])
print(row_concat)

在这里插入图片描述

concat()方法可以连接多个,如果只需要追加一个对象可以使用append()方法:

df1.append(df2)

在这里插入图片描述

DataFrame添加一行数据:

ignore_index = True参数,忽略后面DataFrame的索引

data_dict = {'A':'n1','B':'n2','C':'n3','D':'n4'}
df1.append(data_dict,ignore_index=True)

在这里插入图片描述

DataFrame拼接一列数据

添加一列数据只需要DataFrame['列名'] = ['值1','值2']或者DataFrame['列名'] = Series对象

# concat()方法控制参数axis添加列
col_concat = pd.concat([df1,df2,df3],axis=1)
print(col_concat)

在这里插入图片描述
重置列索引:

col_concat = pd.concat([df1,df2,df3],axis='columns',ignore_index=True)
print(col_concat)

在这里插入图片描述

  1. 连接不同索引的数据集

用concat直接连接不同索引位置的值为NaN

df1.columns = ['A','B','C','D']
df2.columns = ['E','F','G','H']
df3.columns = ['A','C','F','H']
row_concat = pd.concat([df1,df2,df3])
print(row_concat)

在这里插入图片描述

添加join参数为inner,默认为outer,连接时只有索引相同的会显示:
在这里插入图片描述


合并多个数据集

读取MySQL数据库表:

from sqlalchemy import create_engine
# sqlalchemy创建mysql数据库连接
engine = create_engine('mysql+pymysql://root:mysql@localhost:3306/teachingdb_rcq')
# read_sql_table('表名',数据库连接引擎) 方法读取数据库
t_course = pd.read_sql_table('t_course',engine)
t_sinfo = pd.read_sql_table('t_sinfo',engine)
t_student = pd.read_sql_table('t_student',engine)
t_student_course = pd.read_sql_table('t_student_course',engine)
t_teacher = pd.read_sql_table('t_teacher',engine)

在这里插入图片描述
读取sqlite文件:

from sqlalchemy import create_engine
import os
os.chdir('../')
engine = create_engine('sqlite:///data/chinook.db')
#连接数据库
tracks = pd.read_sql_table('tracks', engine)
tracks.head()

一对一合并:

tracks_subset数据表:

在这里插入图片描述

genres数据表:
在这里插入图片描述

merge()方法合并:

参数1为merge合并的数据表
on参数: 以xx字段来进行合并,通常为关联主键
how参数:

  • left只保留左侧表中的所有key
  • right只保留右侧表中的所有key
  • inner只保留两个表中共有的key
  • outer保留左右两侧表中所有的key`
# 选出GenreId不相同的数据,确定一对一关系
tracks_subset = tracks.loc[[0,62,76,98,110,193,204,281,322,359],]
genres.merge(tracks_subset[['TrackId','GenreId','Milliseconds']],on='GenreId',how='left')

多对一合并

这次合并的是没有进行裁剪的tracks表,多对一关系

genres.merge(tracks[['TrackId','GenreId','Milliseconds']],on='GenreId',how='left')

多对一关系合并,多的那一张表会出现重复值
在这里插入图片描述

join合并

数据表:

在这里插入图片描述
左侧表.join()方法合并,参数1为连接的右侧表,lsuffix为左侧表指定的别名,rsuffix为右侧,how参数决定保留哪些key详细看上面merge()方法

# 读取数据
stocks_2016 = pd.read_csv('data/stocks_2016.csv')
stocks_2017 = pd.read_csv('data/stocks_2017.csv')
stocks_2018 = pd.read_csv('data/stocks_2018.csv')
# 合并
stocks_2016.join(stocks_2017, lsuffix='_2016', rsuffix='_2017', how='outer')

在这里插入图片描述

concat、join和merge的区别

方法特点
concat1. pandas函数
2. 可以垂直和水平的连接两个或多个pandas对象
3. 只用索引对齐
4. 默认是外连接(也可以内连接
join1. DataFrame方法
2. 只能水平连接两个或多个pandas对象
3. 对齐是依据被调用的DataFrame的列索引或行索引和另一个对象的行索引(不能为列索引
4. 默认左连接(可以调整how参数为右、内、外连接
merge1. DataFrame方法
2. 只能水平连接两个DataFrame对象
3. 同join的
4. 同join的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值