mysql基础(5)-关联(mysql+pandas)

浏览: 1256

表关联类型

内连接

  • 仅显示满足条件的行
  • From T1,T2 where T1.ID=T2.ID
  • From T1 inner join T2 ON T1.ID=T2.ID

左连接

  • 显示左表T1中的所有行,并把右表T2中符合条件加到左表T1中
  • From T1 left out join T2 ON T1.ID=T2.ID

右连接

  • 显示右表T1中的所有行,并把左表T1中符合条件加到右表T2中
  • From T1 right outer join T2 ON T1.ID=T2.ID

全连接

  • 显示左表T1,右表T2两边中的所有行,即把左联结果表+右联结果表组合在一起,然后过滤掉重复的
  • From T1 full outer join T2 ON T1.ID=T2.ID

 

文件关联类型

文件导入

  • data=pd.read_csv(/path/inputfile) #读取数据
  • df=DataFrame(data) #转换为dataframe格式

内连接

  • df3=pd.merge(df1,df2,on='key')
  • df4=pd.merge(df1,df2,on='key',how='inner')

左连接

df_l=pd.merge(df1,df2,on='key',how='left')

右连接

df_r=pd.merge(df1,df2,on='key',how='right')

全连接

df_a=pd.merge(df1,df2,on='key',how='outer')

 

 

实例

内连接:mysql> select * from stud_info T1 , stud_score T2 where T1.stud_code=T2.stud_code;

内连接:mysql> select * from stud_info T1 inner join stud_score T2 on T1.stud_code=T2.stud_code;

左连接:mysql> select * from stud_info T1 left outer join stud_score T2 on T1.stud_code=T2.stud_code;

右连接:mysql> select * from stud_info T1 right outer join stud_score T2 on T1.stud_code=T2.stud_code;

 

 

文件关联

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: from pandas import DataFrame

In [4]: df1=DataFrame({'key':['a','a','b','c','c'],'data1':range(5)})

In [5]: df2=DataFrame({'key':['a','b','d'],'data1':range(3)})

image.png

内连接【三种方式】

In [8]: df3=pd.merge(df1,df2,on='key') #把符合条件的行取出来

In [10]: df4=pd.merge(df1,df2,on='key',how='inner') 

In [12]: df5=pd.merge(df1,df2,left_on="key",right_on="key",how="inner")

image.png

左连接

In [14]: df_l=pd.merge(df1,df2,on="key",how='left')

image.png

右连接

 In [16]: df_r=pd.merge(df1,df2,on="key",how='right')

image.png

全连接

In [18]: df6=pd.merge(df1,df2,on='key',how='outer')

image.png

In [21]: df7=pd.merge(df1,df2,on='key',how='inner',suffixes=['_left','_right'])

注释:两个表结构相同的字段,自动添加后缀_x,-y,也可自定义后缀,通过suffixes=('_left','_right')

image.png

选择数据

In [24]: df7=df6[['key','data1_x']]

image.png

修改列名

In [40]: df8=df7.rename(columns={'data1_right':'data'}) #将data1_right修改成data

image.png

保存数据

df8.to_csv('data07.csv') #保存到当前目录下

df8.to_csv('data07.csv',index=False,cols=['key','data']) #忽略行索引

实例

关联stud_info.csv、stud_score.csv;左关联;关联字段stud_code;保存结果到文件

 #!/bin/bash
#文件名称:pandas_mysql2.sh
#文件功能:左关联两个文件并保存结果到文件
#创建时间:2016-07-30
#创建作者:邬家栋

ipython << EOF
import numpy as np
import pandas as pd
from pandas import DataFrame
import MySQLdb

conn=MySQLdb.connect(host='localhost',port=21124,user='feigu_mysql',passwd='feigu2016',db='testdb',charset='utf8',unix_socket='/var/run/mysqld/mysqld.sock')
data1=pd.read_csv('/tmp/stud_info.csv')
data2=pd.read_csv('/tmp/stud_score.csv')
df1=DataFrame(data1)
df2=DataFrame(data2)
df_l=pd.merge(df1,df2,on='stud_code',how='left')
df_l.to_csv('datawu2.csv')
cat datawu2.csv
quit

image.png

推荐 0
本文由 邬家栋 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册