pandas中合并数据集

数据集的合并🔍

1、pandas.merge()

对于数据库风格的DataFrame进行联合

  • 语法👇:

pandas.merge(left, right, how=‘inner’, on=None)

left:参与合并的左侧DataFrame。
right:参与合并的右侧DataFrame。
how:指DataFrame的连接方式。默认为inner,inner是使用两个表都有的键(多对多连接 是行的笛卡尔积)——这里可以理解为:比如2对2,首先左边的1对完右边的1和2之后,在左边的2对右边的1和2,因此结果中排列组合实际就是3*2个结果;left使用左表中所有的键;right使用右表中所有的键;outer使用 两个表中所有 的键。
on:用于连接的列名,必须同时存在于左右两个DataFrame对象中。如果未指定,则以left和right列名的交集作为连接键。
left_on:左侧DataFrame中用作连接键的列。
right_on:右侧DataFrame中用作连接键的列。
left_index:将左侧的行索引用作其连接键。
right_index:将右侧的行索引用作其连接键。
sort:根据连接件对合并后的数据进行排序,默认为True。(有时在处理大数据集时,禁用该选项可获得更好的性能)
suffixes:在重叠情况下,添加到列名后的字符串元组;默认是(’_x’,’_y’)(例如如果待合并的DataFrame中都含有‘data’列,那么结果中会出现’data_x’,‘data_y’)。
copy:如果为False,则在某些特殊情况下避免将数据复制到结果数据中;默认情况下总是复制。
indicator:添加一个特殊的列_merge,指示每一行的来源;值将根据每行中连接数据的来源分别为’left_only’,‘right_only’或’both’。

  • 例子🌰
>>>df1=pd.DataFrame({'key':['b','b','a','c','a','b'],
                  'data1':range(6)})
>>>df2=pd.DataFrame({'key':['a','b','a','b','d'],
                         'data2':range(5)})   
>>>df1
  key	data1
0	b	0
1	b	1
2	a	2
3	c	3
4	a	4
5	b	5  
>>>df2
  key  data2
0   a      0
1   b      1
2   a      2
3   b      3
4   d      4   
>>>pd.merge(df1,df2,on='key',how='left')
   key  data1  data2
0    b      0    1.0
1    b      0    3.0
2    b      1    1.0
3    b      1    3.0
4    a      2    0.0
5    a      2    2.0
6    c      3    NaN
7    a      4    0.0
8    a      4    2.0
9    b      5    1.0
10   b      5    3.0     
>>>pd.merge(df1,df2,how='inner')
  key  data1  data2
0   b      0      1
1   b      0      3
2   b      1      1
3   b      1      3
4   b      5      1
5   b      5      3
6   a      2      0
7   a      2      2
8   a      4      0
9   a      4      2

2、join方法

用于按照索引合并

  • 这个函数比较简单,直接举例🌰
>>>left2=pd.DataFrame([[1.,2.],[3.,4.],[5.,6.]],
                      index=['a','c','e'],
                      columns=['Ohio','Nevada'])
>>>right2=pd.DataFrame([[7.,8.],[9.,10.],[11.,12.],[13.,14.]],
                       index=['b','c','d','e'],
                       columns=['Missouri','Alabama'])    
>>>left2
    Ohio  Nevada
a	 1.0     2.0
c	 3.0     4.0
e	 5.0	 6.0   
>>>right2 
   Missouri	 Alabama
b	    7.0	     8.0
c	    9.0	    10.0
d	   11.0	    12.0
e	   13.0	    14.0   
>>>left2.join(right2,how='outer')
   Ohio	 Nevada	 Missouri  Alabama
a	1.0	    2.0	      NaN	   NaN
b	NaN	    NaN	      7.0	   8.0
c	3.0	    4.0	      9.0	  10.0
d	NaN	    NaN	     11.0	  12.0
e	5.0	    6.0	     13.0	  14.0     
>>>another=pd.DataFrame([[7.,8.],[9.,10.],[11.,12.],[16.,17.]],
                        index=['a','c','e','f'],
                        columns=['New York','Oregon'])
>>>another
	New York	Oregon
a	     7.0	   8.0
c	     9.0	  10.0
e	    11.0	  12.0
f	    16.0	  17.0      
>>>left2.join([right2,another])
   Ohio	  Nevada   Missouri	  Alabama	New York   Oregon
a	1.0	     2.0	    NaN	      NaN	     7.0	  8.0
c	3.0	     4.0	    9.0	     10.0	     9.0	 10.0
e	5.0	     6.0	   13.0	     14.0	    11.0	 12.0  
'''由于一些历史原因(pandas版本过低),DataFrame的join方法进行连接键上的左连接,完全保留左边DataFrame的行索引。
它还支持在调用DataFrame的某一列上连接传递的DataFrame的索引:'''
>>>left1=pd.DataFrame({'key':['a','b','a','a','b','c'],
                    'value':range(6)}) 
>>>right1=pd.DataFrame({'group_val':[3.5,7]},
                    index=['a','b']) 
>>>left1
  key	value
0	a	    0
1	b	    1
2	a	    2
3	a	    3
4	b	    4
5	c	    5        

3、 对于 NumPy数组的拼接或绑定, numpy.concatenate() 方法可以实现。

  • 例子🌰
>>>arr=np.arange(12).reshape((3,4))
>>>arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>np.concatenate([arr,arr],axis=1)
array([[ 0,  1,  2,  3,  0,  1,  2,  3],
       [ 4,  5,  6,  7,  4,  5,  6,  7],
       [ 8,  9, 10, 11,  8,  9, 10, 11]])

4、pandas.concat()

  • 语法👇:

pandas.concat(objs,axis=0, join=‘outer’, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

objs: 参与连接的pandas对象的列表或字典。唯一必需的参数。
axis: 指明连接的轴向(0为"index",1为"columns"),默认为0.
join: “inner"或"outer”,默认为"outer"。指明其他轴向上的索引是按交集(inner)还是并集(outer)进行合并。
keys: 与连接对象有关的值,用于形成连接轴向上的层次化索引。可以是任意值的列表或数组、元组数组、数组列表(如果将levels设置成多级数组的话)
levels: 指定用作层次化索引各级别上的索引 好累明天继续写吧

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pandas合并数据集是指将两个或多个数据集按照一定的规则合并成一个新的数据集。常用的合并方式有concat、merge和join。其,concat是将两个数据集按照行或列方向拼接在一起,merge是根据某一列或多列的值将两个数据集合并成一个,join是根据两个数据集的索引值将它们合并成一个。Pandas合并数据集数据分析常用的操作之一,可以帮助我们更好地理解数据,发现数据之间的关系。 ### 回答2: pandas是一个强大的数据分析库,能够方便地进行数据处理和分析。在数据分析数据集往往需要进行合并,这时我们就可以用pandas进行数据集合并pandas数据集合并可以分为三种方式: 1. 按列合并: 将两个数据集按照列的方向进行合并,可以使用pandas的concat函数。具体步骤如下: 1)通过pd.concat函数对两个数据集进行合并; 2)使用axis参数指定合并方向,默认为0,即按照行的方向合并; 3)可以设置ignore_index参数为True来重新生成索引。 2. 按行合并: 将两个数据集按照行的方向进行合并,可以使用pandas的merge函数。具体步骤如下: 1)通过pd.merge函数对两个数据集进行合并; 2)可以使用on参数指定列名来指定进行合并的列; 3)可以使用how参数指定合并的方式,默认为'inner',即取两个数据集共有的行。 3. 按指定条件合并: 将两个数据集按照指定条件进行合并,可以使用pandas的merge函数。具体步骤如下: 1)通过pd.merge函数对两个数据集进行合并; 2)可以使用left_on、right_on参数指定左、右数据集进行合并的列名; 3)可以使用how参数指定合并的方式,默认为'inner',即取两个数据集共有的行。 以上是pandas合并数据集的三种方式,不同的方式可以根据具体情况进行选择。其,按指定条件合并是最灵活的方式,可以根据需要进行复杂合并。 在使用pandas合并数据集时,需要注意数据集的格式相同,并且数据字段的名称相同或能够唯一对应。同时,还需要注意是否存在重复的数据,如果存在需要进行去重操作。 ### 回答3: Pandas是一个用于数据分析Python库,其的DataFrame是数据处理的重要工具之一。在实际的应用,我们常常需要将多个数据集进行合并Pandas的merge方法可以方便地完成这个操作。 Pandas的merge方法可以根据指定的key将两个DataFrame的行连接在一起。key是DataFrame一个或多个列的名称,这些列的值都是唯一的,用于将行匹配。比如,我们有一个包含学生信息的DataFrame和一个包含课程信息的DataFrame,它们都有一个名为“学号”的列可以用于匹配。那么我们可以使用merge方法将它们连接在一起,这样我们就可以得到一个包含学生和课程信息的完整数据集。 merge方法的语法如下: ``` pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None) ``` 其,left和right是需要合并的DataFrame;how表示合并的方式(inner、outer、left或right);on表示需要连接的列名;left_on和right_on表示需要连接的左右两个DataFrame不同的列名;left_index和right_index表示是否使用行索引连接;sort表示是否对结果DataFrame按连接列进行排序;suffixes表示重名的列需要加上的后缀。 比如,我们可以这样合并学生信息和课程信息: ``` import pandas as pd # 创建学生信息DataFrame student_df = pd.DataFrame({ '学号': ['s1', 's2', 's3', 's4'], '姓名': ['张三', '李四', '王五', '赵六'], '性别': ['男', '女', '男', '女'] }) # 创建课程信息DataFrame course_df = pd.DataFrame({ '学号': ['s1', 's2', 's3', 's4'], '课程名称': ['数学', '物理', '化学', '英语'], '成绩': [90, 80, 85, 95] }) # 将两个DataFrame合并 result_df = pd.merge(student_df, course_df, on='学号') print(result_df) ``` 运行结果如下: ``` 学号 姓名 性别 课程名称 成绩 0 s1 张三 男 数学 90 1 s2 李四 女 物理 80 2 s3 王五 男 化学 85 3 s4 赵六 女 英语 95 ``` 可以看到,result_df包含了学生信息和课程信息,行数和列数与student_df相同,只是新增了“课程名称”和“成绩”两列。在合并DataFrame时,Pandas会默认对连接列进行交集操作,即只保留两个DataFrame都存在的行。如果想要保留所有行,可以使用outer方式合并。如果想要保留左边DataFrame的所有行,可以使用left方式合并;反之,如果想要保留右边DataFrame的所有行,可以使用right方式合并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值