利用pandas如何实现类似sql中的left join操作
作者:slaythedragon
这篇文章主要介绍了利用pandas如何实现类似sql中的left join操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
pandas实现类似sql中的left join操作
使用pandas的merge函数
import pandas as pd df1 = pd.read_csv(r"1.csv",index_col=0) df2 = pd.read_csv(r"2.csv",index_col=0) # on中填写根据哪个字段来进行连接,how为left代表left join df = pd.merge(df1,df2, on='LocationID',how='left') # print(df) # 只取出这些列,组成新的DataFrame,带有col_name df = df[['LocationName','Description','ActiveFlag','owner name','the location nature']] # 将列进行重命名 new_col = ['location code', 'location name', 'ActiveFlag','owner name','the location nature'] df.columns = new_col print(df) # 导出为csv df.to_csv(path_or_buf=r"3.csv", encoding="utf_8_sig")
pandas数据拼接操作merge、join、concat
在做数据处理过程中会遇到多个数据集之间进行拼接的操作,这里由于平时都是用的Pandas读取的数据集,所以一般是针对的是DataFrame类型的数据进行拼接操作。
1. merge
用于通过一个或多个键将两个数据集的行连接起来,类似于 SQL 中的 JOIN。
该函数的典型应用场景是,针对同一个主键存在两张包含不同字段的表,现在我们想把他们整合到一张表里。
在此典型情况下,结果集的行数并没有增加,列数则为两个元数据的列数和减去连接键的数量。
df.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True)
参数解释:
right
: 要连接的目标数据,类型为DataFrame或者带列名的Serieshow
:连接方式,类似sql语句中的(left ,right,inner,outer),这里默认为'inner', 可选的参数有left, right , inner , outeron
: 连接的列名或者index, 也就是指明2个要连接的对象之间通过哪个列名或者索引名进行连接。left_on
: 指定左边的DataFrame以哪个列名或者索引名进行连接right_on
:指定右边的DataFrame以哪个列名或者索引名进行连接left_index
:用左边的DataFrame当做连接Keyright_index
:用右边的DataFrame当做连接Keysort
:按照字典顺序对连接Key进行排序,默认为False,默认连接键的顺序取决于连接类型suffixes
:连接后的列名默认带下标 ('_x' , '_y')copy
:默认复制,如果设置为False,则尽可能的避免复制
a . 默认以相同的列名进行连接键
2. join
拼接列,主要用于索引上的合并,提供了一个简便的方法用于将两个DataFrame中的不同的列索引合并成为一个DataFrame
df.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
参数解释:
other
:另一个待拼接的DataFrame或者有名称列表的Serieson
:连接的列名或者index, 也就是指明2个要连接的对象之间通过哪个列名或者索引名进行连接。how
:连接方式,类似sql语句中的(left ,right,inner,outer),这里默认为'left', 可选的参数有left, right , inner , outerlsuffix
: 左边的连接Key要用的下标rsuffix
: 右边的连接Key要用的下标sort
:对拼接后的列名按照字典顺序排序,默认为False,False的时候,保留按照左边的DataFrame进行排序的顺序。
3. concat
可以沿着一条轴将多个对象堆叠到一起
concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。
与数据库不同的是concat不会去重,要达到去重的效果可以使用drop_duplicates方法
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False,copy=True)
参数解释:
objs
: 需要连接的对象集合,一般是列表或字典;axis
: 0代表index 连接,1代表列连接 ,默认为0join
:连接方式 ,默认为‘outer’,还可以选择‘inner’ignore_index
:默认为False,如果为True,则是指忽略之前的Index,直接按照默认分配index从0-N-1进行分配,对于结合后的index并没有啥意义的时候比较适用,用来重建索引keys
:用来创建层次化索引levels
: 层级,用来在列上进行划分names
:指定levels中的列名verify_integrity
:确定新结合的数据是否有重复值,但是会很耗费资源copy
:复制数据
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。