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

表关联类型
内连接
  • 仅显示满足条件的行
  • 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)})

内连接【三种方式】
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")
 
左连接
In [14]: df_l=pd.merge(df1,df2,on="key",how='left')
 
右连接
 In [16]: df_r=pd.merge(df1,df2,on="key",how='right')
 
 
 全连接
In [18]: df6=pd.merge(df1,df2,on='key',how='outer')
 
In [21]: df7=pd.merge(df1,df2,on='key',how='inner',suffixes=['_left','_right'])
注释:两个表结构相同的字段,自动添加后缀_x,-y,也可自定义后缀,通过suffixes=('_left','_right')
 
选择数据
In [24]: df7=df6[['key','data1_x']]
 
修改列名
In [40]: df8=df7.rename(columns={'data1_right':'data'}) #将data1_right修改成data
 
保存数据
df8.to_csv('data07.csv') #保存到当前目录下
df8.to_csv('data07.csv',index=False,cols=['key','data']) #忽略行索引
 
实例
关联stud_info.csv、stud_score.csv;左关联;关联字段stud_code;保存结果到文件
 1 #!/bin/bash
 2 #文件名称:pandas_mysql2.sh
 3 #文件功能:左关联两个文件并保存结果到文件
 4 #创建时间:2016-07-30
 5 #创建作者:邬家栋
 6 
 7 ipython << EOF
 8 import numpy as np
 9 import pandas as pd
10 from pandas import DataFrame
11 import MySQLdb
12 
13 conn=MySQLdb.connect(host='localhost',port=21124,user='feigu_mysql',passwd='feigu2016',db='testdb',charset='utf8',unix_socket='/var/run/mysqld/mysqld.sock')
14 data1=pd.read_csv('/tmp/stud_info.csv')
15 data2=pd.read_csv('/tmp/stud_score.csv')
16 df1=DataFrame(data1)
17 df2=DataFrame(data2)
18 df_l=pd.merge(df1,df2,on='stud_code',how='left')
19 df_l.to_csv('datawu2.csv')
20 cat datawu2.csv
21 quit

 
 
 
posted @ 2016-07-29 16:57  邬家栋  阅读(964)  评论(0编辑  收藏  举报