Python基础(三) - DataFrame中的表关联

简介

讲一下怎么在Python中关联两个表,并看到结果。

 

环境介绍

系统环境:Windows 10

Python版本:Python 3.5

必备包:pandas

 

核心语句:pd.merge

pd.merge是用于进行类似SQL中JOIN语句的操作。可以实现根据指定字段匹配并将两个表关联起来。

 

核心参数

下面是公式的几个核心参数,一般我只会用到这些。

left

左侧DataFrame

right

左侧DataFrame

how

连接方式:‘inner’(默认)、‘outer’、‘left’(左关联)、‘right’(右关联)

on

用于连接的字段名,必须同时存在于左右两个DataFrame对象中。如果左右列名不一样,则可以不指定,用下面的left_on与right_on代替

left_on

左侧DataFarme中用于关联的列名。

可以定义1个或多个,但是要与right_on格式保持一致

right_on

右侧DataFarme中用于关联的列名

可以定义1个或多个,但是要与right_on格式保持一致

left_index

是否将左侧的行索引用作其连接键,可选值True/False

right_index

是否将右侧的行索引用作其连接键,可选值True/False

 

代码样例

###############################################################################
# 随便建2个dataframe
###############################################################################

import pandas as pd

data1 = {"学号":['A','B','C','D'],
         "姓名":['橘猫','鳄鱼','柴犬','海豹'],
         "成绩":['99','60','75','80']}

data2 = {"编码":['A','C','D'],
         "姓名":['橘猫','柴犬','海豹'],
         "生日":['0303','0222','0707']}


df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)


###############################################################################
# 关联
###############################################################################
result1 = pd.merge(df1, df2, left_on='学号', right_on='编码' , how='left', sort=False)

 

注意事项:确保关联两张表的字段一定要格式一样,长度一样。

在关联的时候,有时出现这种情况:明明我们看到两个字段中的值是一样的,但就是关联不出来,Python关联后j结果都是nan。

出现这种情况时,一定要检查我们用于关联的字段(Key)是不是一致的。

如果关联的Key是数值型的

这种情况下,首先确保字段的格式是一样的。用下面的代码能直接查看Dataframe中所有字段的格式:

df.dtypes

如果发现在df1中字段是整形,在df2中同样字段是小数型,那就需要我们先将两个字段的格式统一后再进行匹配。

 

如果关联的Key是文本型的

这种情况,使用dtypes的意义一般不大。因为大多数文本型的字段在dtypes中都会显示“object”这一结果。

所以,一旦出现匹配不上的情况,我们可以从下面几个角度查看字段是否一致:

  • 是否记录的前/后出现了空格?此时可以用len()语句检查记录长度
  • 是否记录中本身就存在大量空值?此时可以用isnull()语句检查空值情况
  • 是否记录的编码不一致?

在匹配对象是文本的情况下,需要格外注意两个DataFrame中的字段是否一致。

你可能感兴趣的:(Python基础)