合并():要注意使用merge还是join
#merge是因为两个合并的对象,有相同的列,merge以这些相同的列为索引进行合并,默认内连接('inner'join),可通过参数how来设置左连接,右连接,全连接其他链接方式。下面的栗子按照索引合并,就会出现两个sorce,不可以join
#join实现按索引合并,而不管他们有么有相同的列,默认链接键上的左连接,同样可以通过参数how更改.同时可以指定on ="keyname',则把两个df 按照索引链接,并将原索引为新的“keyname”列,重新设置0,1,2..的索引
import pandas as pd
df = pd.DataFrame({"key":['green','red', 'blue'],
"data1":['a','b','c'],"sorce": [33,61,99]})
'''
-------df---------
data1 key sorce
0 a green 33
1 b red 61
2 c blue 99
-------df_dummies3-----
-------pd.get_dummies(df)----df_dummies3-----
sorce data1_a data1_b data1_c key_blue key_green key_red
0 33 1.0 0.0 0.0 0.0 1.0 0.0
1 61 0.0 1.0 0.0 0.0 0.0 1.0
2 99 0.0 0.0 1.0 1.0 0.0 0.0
-------df_dummies6----
sorce_不及格 sorce_及格 sorce_优秀
0 1.0 0.0 0.0
1 0.0 1.0 0.0
2 0.0 0.0 1.0
'''
#join此处不可以,ValueError: columns overlap but no suffix specified: Index(['sorce'], dtype='object')
#用merge是因为两个合并的对象,有相同的列sorce,merge将以这些相同的列为索引进行拼接。默认内连接,结果是两张表的交集
df_new= pd.merge(df,df_dummies3)
print(df_new)
print(df_new.columns)
----------------
data1 key sorce data1_a data1_b data1_c key_blue key_green key_red
0 a green 33 1.0 0.0 0.0 0.0 1.0 0.0
1 b red 61 0.0 1.0 0.0 0.0 0.0 1.0
2 c blue 99 0.0 0.0 1.0 1.0 0.0 0.0
Index(['data1', 'key', 'sorce', 'data1_a', 'data1_b', 'data1_c', 'key_blue',
'key_green', 'key_red'],
dtype='object')
----------------------
#此处不可以merge, 因为两个没有相同的列。会报错:pandas.tools.merge.MergeError: No common columns to perform merge on
#用join实现按索引合并,而不管他们有没有相同的列.
#同时可以指定on ="keyname',则把两个df 按照索引链接,并将原索引为新的“keyname”列,重新设置0,1,2..的索引,这种方法不设置其他参数的话,等价于marge的左连接
df_new= df.join(df_dummies6)
print(df_new)
print(df_new.columns)
-------------------
data1 key sorce sorce_不及格 sorce_及格 sorce_优秀
0 a green 33 1.0 0.0 0.0
1 b red 61 0.0 1.0 0.0
2 c blue 99 0.0 0.0 1.0
Index(['data1', 'key', 'sorce', 'sorce_不及格', 'sorce_及格', 'sorce_优秀'], dtype='object')
作者:shuihupo
来源:CSDN
具体详细可转看原文:https://blog.csdn.net/shuihupo/article/details/82717654
版权声明:本文为博主原创文章,转载请附上博文链接!