- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近在工作中,遇到了数据合并、连接的问题,故整理如下,供需要者参考~ 。
1、concat:沿着一条轴,将多个对象堆叠到一起 。
concat方法相当于数据库中的全连接(union all),它不仅可以指定连接的方式(outer join或inner join)还可以指定按照某个轴进行连接。与数据库不同的是,它不会去重,但是可以使用drop_duplicates方法达到去重的效果.
1
2
|
concat(objs, axis
=
0
, join
=
'outer'
, join_axes
=
None
, ignore_index
=
False
,
keys
=
None
, levels
=
None
, names
=
None
, verify_integrity
=
False
, copy
=
True
):
|
pd.concat()只是单纯的把两个表拼接在一起,参数axis是关键,它用于指定是行还是列,axis默认是0.
当axis=0时,pd.concat([obj1, obj2])的效果与obj1.append(obj2)是相同的;当axis=1时,pd.concat([obj1, obj2], axis=1)的效果与pd.merge(obj1, obj2, left_index=True, right_index=True, how='outer')是相同的.
merge方法的介绍请参看下文.
参数介绍:
objs:需要连接的对象集合,一般是列表或字典; 。
axis:连接轴向; 。
join:参数为‘outer'或‘inner'; 。
join_axes=[]:指定自定义的索引; 。
keys=[]:创建层次化索引; 。
ignore_index=True:重建索引 。
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
df1
=
DataFrame(np.random.randn(
3
,
4
),columns
=
[
'a'
,
'b'
,
'c'
,
'd'
])
df2
=
DataFrame(np.random.randn(
2
,
3
),columns
=
[
'b'
,
'd'
,
'a'
])
pd.concat([df1,df2])
a b c d
0
-
0.848557
-
1.163877
-
0.306148
-
1.163944
1
1.358759
1.159369
-
0.532110
2.183934
2
0.532117
0.788350
0.703752
-
2.620643
0
-
0.316156
-
0.707832
NaN
-
0.416589
1
0.406830
1.345932
NaN
-
1.874817
pd.concat([df1,df2],ignore_index
=
True
)
a b c d
0
-
0.848557
-
1.163877
-
0.306148
-
1.163944
1
1.358759
1.159369
-
0.532110
2.183934
2
0.532117
0.788350
0.703752
-
2.620643
3
-
0.316156
-
0.707832
NaN
-
0.416589
4
0.406830
1.345932
NaN
-
1.874817
|
2、merge:通过键拼接列 。
类似于关系型数据库的连接方式,可以根据一个或多个键将不同的DatFrame连接起来。该函数的典型应用场景是,针对同一个主键存在两张不同字段的表,根据主键整合到一张表里面.
1
2
3
|
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
)
|
参数介绍:
left和right:两个不同的DataFrame; 。
how:连接方式,有inner、left、right、outer,默认为inner; 。
on:指的是用于连接的列索引名称,必须存在于左右两个DataFrame中,如果没有指定且其他参数也没有指定,则以两个DataFrame列名交集作为连接键; 。
left_on:左侧DataFrame中用于连接键的列名,这个参数左右列名不同但代表的含义相同时非常的有用; 。
right_on:右侧DataFrame中用于连接键的列名; 。
left_index:使用左侧DataFrame中的行索引作为连接键; 。
right_index:使用右侧DataFrame中的行索引作为连接键; 。
sort:默认为True,将合并的数据进行排序,设置为False可以提高性能; 。
suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为('_x', '_y'); 。
copy:默认为True,总是将数据复制到数据结构中,设置为False可以提高性能; 。
indicator:显示合并数据中数据的来源情况 。
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# 1.默认以重叠的列名当做连接键。
df1
=
DataFrame({
'key'
:[
'a'
,
'b'
,
'b'
],
'data1'
:
range
(
3
)})
df2
=
DataFrame({
'key'
:[
'a'
,
'b'
,
'c'
],
'data2'
:
range
(
3
)})
pd.merge(df1,df2)
#没有指定连接键,默认用重叠列名,没有指定连接方式
data1 key data2
0
0
a
0
1
1
b
1
2
2
b
1
# 2.默认做inner连接(取key的交集),连接方式还有(left,right,outer),制定连接方式加参数:how=''
pd.merge(df2,df1)
data2 key data1
0
0
a
0
1
1
b
1
2
1
b
2
#默认内连接,可以看见c没有连接上。
pd.merge(df2,df1,how
=
'left'
)
#通过how,指定连接方式
data2 key data1
0
0
a
0
1
1
b
1
2
1
b
2
3
2
c NaN
# 3.多键连接时将连接键组成列表传入,例:pd.merge(df1,df2,on=['key1','key2']
right
=
DataFrame({
'key1'
:[
'foo'
,
'foo'
,
'bar'
,
'bar'
],
'key2'
:[
'one'
,
'one'
,
'one'
,
'two'
],
'lval'
:[
4
,
5
,
6
,
7
]})
left
=
DataFrame({
'key1'
:[
'foo'
,
'foo'
,
'bar'
],
'key2'
:[
'one'
,
'two'
,
'one'
],
'lval'
:[
1
,
2
,
3
]})
right
=
DataFrame({
'key1'
:[
'foo'
,
'foo'
,
'bar'
,
'bar'
],
'key2'
:[
'one'
,
'one'
,
'one'
,
'two'
],
'lval'
:[
4
,
5
,
6
,
7
]})
pd.merge(left,right,on
=
[
'key1'
,
'key2'
],how
=
'outer'
)
#传出数组
key1 key2 lval_x lval_y
0
foo one
1
4
1
foo one
1
5
2
foo two
2
NaN
3
bar one
3
6
4
bar two NaN
7
# 4.如果两个对象的列名不同,可以分别指定,例:pd.merge(df1,df2,left_on='lkey',right_on='rkey')
df3
=
DataFrame({
'key3'
:[
'foo'
,
'foo'
,
'bar'
,
'bar'
],
#将上面的right的key 改了名字
'key4'
:[
'one'
,
'one'
,
'one'
,
'two'
],
'lval'
:[
4
,
5
,
6
,
7
]})
pd.merge(left,df3,left_on
=
'key1'
,right_on
=
'key3'
)
#键名不同的连接
key1 key2 lval_x key3 key4 lval_y
0
foo one
1
foo one
4
1
foo one
1
foo one
5
2
foo two
2
foo one
4
3
foo two
2
foo one
5
4
bar one
3
bar one
6
5
bar one
3
bar two
7
|
3、join:主要用于索引上的合并 。
1
|
join(
self
, other, on
=
None
, how
=
'left'
, lsuffix
=
'
', rsuffix='
',sort
=
False
):
|
其参数的意义与merge方法中的参数意义基本一样.
以上这篇在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/gdkyxy2013/article/details/80785361 。
最后此篇关于在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例的文章就讲到这里了,如果你想了解更多关于在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
数据库设置: http://sqlfiddle.com/#!2/4d1c2/1 以下查询选择属于productID的所有标签及其位置,逗号分隔: SELECT CONCAT_WS(',', GROUP
要连接两个文件,它看起来像这样: concat: { src: ['common.js','js/app.js'], dest: 'assets/js/app.js' } 如果
我有一个执行 SQL 脚本的 PDI(Kettle)转换,脚本的输出是一列,如下所示: val1 val2 val3 val4 "more values"... 我需要像这样在一个 Excel 单元格
我正在尝试传递一个参数 [例如@X nvarchar(MAX)] 转换成变量 [例如@message nvarchar(MAX)] 在存储过程中。该变量使用 CONCAT 组合字符串值和变量,它最终成
我不知道如何解释我的问题... 这是我的sql请求: SELECT DISTINCT CONCAT (nompropre, ' ', Auteur, ' de ', localite) AS aute
如何在与另一个表连接的表中使用 concat 和 group concat。架构如下所示: 第一表: MariaDB [ittresnamuda]> select * from tb_tipe_req
在我的 CREATE VIEW 中,我想: SELECT CONCAT( t.str1, t.str2 ) AS Title, CHAR_LENGTH( Title ) AS Length 但这会产生
我正在使用 CriteriaBuilder.concat 连接 2 个字符串,代码如下: Expression concat = criteriaBuilder.concat(expr1, expr2
我有以下继承 IEnumerable 的类 public class LinesEnumerable : IEnumerable { protected readonly IPointSeri
_.concat 和有什么区别lodash 和 Array.prototype.concat() ?. 最佳答案 欢迎来到 Stackoverflow! 这些函数的工作方式相同,但语法不同: _.co
我有一个非常大的表(几百万条记录)。表中的列 A 目前是这样的:id、道路名称、纬度、经度,其中 id 是自动增量 PK。 目前,1 个道路名称可以在表中包含多个条目,因为每条道路都映射到多个(纬度、
我测试了各种数组连接技术,并不是因为它实际上对我的代码很重要,而只是顺便说一句,看看我们现在在哪里。正如预期的那样,非常新的 ES 2015 传播运算符在 JavaScript 数组上被旧的 conc
我有一个数组,我需要使用一些编辑重新编译。我是在 async.concat() 的帮助下完成的,但有些东西不起作用。告诉我,哪里错了? async.concat(dialogs, function(d
在 JavaScript 中,我遇到过以两种主要方式编写的代码,用于连接两个(或更多)使用 .concat() 的数组。 Array 上的方法目的。 (假设在下文中,arr1 和 arr2 是作为 .
我之前曾使用 stack over flow 来解决我的 sql 问题并且成功了。 这一次我的下一期可能不会那么成功。 我有一个名为 Statements_1 的表,该表大约有 50 列,假设有 10
我在想以一种相当奇怪的方式从数据库获取东西时遇到了一些麻烦。假设我有下一张 table ID | Rating 229 | 3 229 | 2 229 | 4 229 | 2 2
我有类似表中的内容 mysql> select uuid , short-uuid FROM sampleUUID WHERE identifier ="test123"; +------------
我有一个查询,用于获取我离开加入两个表的帖子: 类别和标签:LEFT JOIN 到链接表→‖INNER JOIN 到类别和标签名称表。 LEFT JOIN wp_term_relationships
我目前正在开发一个大型 angular.js 项目。我使用 grunt 将所有文件合并/丑化为一个大的 target.js 文件,然后将其包含在索引页中。 我已经意识到,这使得在开发环境中调试变得非常
我的表中有三列:firstName、lastName 和 jobTitle。我想将 firstName 和 lastName 连接为 Fullname,然后连接 Fullname 和 jobTitle
我是一名优秀的程序员,十分优秀!