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

python数据处理----数据合并,第1张

连接数据 加载多份数据连接
# 读取数据
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的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/727600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存