萝卜头社区 http://www.luobotou.net 需要用python 实现excel的vlookup
1直接用excel vlookup,每次都设,不方便,我们该用python 看下。
PYTHON对于两个表的连接有两个重要拼接函数,pandas 中的 concat 和merge
一 定义两个原表:
1、Python-concat
都是ID为主键,num为数值
由此可见concat其实就是个拼接函数,无脑拼接
#axis =0或缺省 为上下连接,axis =1则左右连接
程序代码如下:
2.Python-merge
语法:dataframe.merge(dataframe1, dataframe2, how, on, copy, indicator, suffixes, validate)
merge其实就是数据库里面的join函数。
相较于concat,id只有一列了但这个是典型的左连接,他只适应于相同索引,不同列的拼接
参数:
datafram1:要合并的dataframe对象,pd1
dataframe2:要合并的dataframe对象,pd2
简单完全合并,样式如下
result=pd.merge(pd1,pd2,on='关键字',how="连接方式r")
how:{left,right,inner,external}指定如何进行合并
内联接(Inner join):内部联接仅产生两行都满足条件的那些行的输出数据帧。要执行内部联接,您可以指定inner作为关键字。
左联接(Left join):左联接操作提供第一个数据帧中的所有行以及第二个数据帧中匹配的行。如果第二个数据帧中的行不匹配,则将其替换为NaN
右连接(Right join):右连接有点类似于左连接,在右连接中,输出数据帧将包含第二个数据帧中的所有行和第一个数据帧中的匹配行。如果第一个数据帧中的行不匹配,则将其替换为NaN
外联接(Outer join):外部联接提供了由两个数据帧中的行组成的输出数据帧。如果行匹配,将显示值,否则将显示不匹配的NaN。
on:指定用于执行连接的列或索引名称。
suffixes:后缀用于重叠的列。对于异常,使用值(False,False)。
validate:如果指定,则检查合并的类型.merge的类型可以是(one-one,one-many,many-one,many-many)。
========代码
通过merge方式,可以实现vlookup,但能否将DF1中的空值,用DF2对应的数据填充呢? 这个就要用到 fillna 函数!
3、.Python-fillna----填充空值
fillna 函数! 用空值填充?完美解决问题!
代码:
#fillna 填充空值的方式
df1=df1.set_index('id') #设置主键
df2=df2.set_index('id') #设置主键
df6=df1.fillna(df2) #用DF2的值填充DF1的空值
print("=====df6用DF2的值填充DF1的空值=fillna=====")
print(df6)
分析: