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)

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

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

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

DataFrame和Series连接:

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

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

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

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

df1.append(df2)

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

DataFrame添加一行数据:

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

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

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

DataFrame拼接一列数据

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

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

《python数据处理----数据合并》
重置列索引:

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

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

  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)

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

添加join参数为inner,默认为outer,连接时只有索引相同的会显示:
《python数据处理----数据合并》

合并多个数据集

读取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)

《python数据处理----数据合并》
读取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数据表:

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

genres数据表:
《python数据处理----数据合并》

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')

多对一关系合并,多的那一张表会出现重复值
《python数据处理----数据合并》

join合并

数据表:

《python数据处理----数据合并》
左侧表.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')

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

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的
    原文作者:B.Bz
    原文地址: https://blog.csdn.net/bjsyc123456/article/details/124339530
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞