pd之间的本质区别是什么。数据帧。合并()
和pd。concat()
?
到目前为止,这是我发现的,请评论我的理解是否完整和准确:
>
. merg()
只能使用列(加上行索引),并且它在语义上适合于数据库风格的操作。. conat()
可以与任一轴一起使用,只使用索引,并且提供了添加一个分级索引。
顺便说一下,这允许以下冗余:两者都可以使用行索引组合两个数据帧。
pd。数据帧。join()
只提供了用例子集的简写。merge()
(Pandas擅长处理数据分析中非常广泛的用例。探索文档以找出执行特定任务的最佳方式可能有点令人生畏。)
pd。concat
将Iterable
作为其参数。因此,它不能将DataFrame
s直接作为其参数。此外,DataFrame
的维度
s在连接时应沿轴匹配。
pd.merge
可以以DataFrame
s作为参数,用于将两个DataFrame
s与相同的列或索引组合在一起,这不能用pd.concat
来完成它将在DataFrame中显示重复的列。
而连接可以用于连接两个具有不同索引的DataFrame
。
在高级别:
。concat()
只需将多个数据帧垂直堆叠在一起,或在索引上对齐后水平缝合
更具体地说,
。concat()
:
是一个顶级的熊猫功能
- 合并两个或多个熊猫
DataFrame
垂直或水平 - 水平组合时仅在索引上对齐
- 当任何
DataFrame
包含重复索引时出错。 - 默认外部连接选项为内连接
和
。merge()
:
作为顶级pandas函数和数据帧
方法存在(从pandas 1.0开始)
- 在水平方向上正好组合两个数据帧
- 将调用的数据帧的列或索引与另一个数据帧的列或索引对齐
- 通过执行笛卡尔乘积处理连接列或索引上的重复值
- 默认为“内部联接”,带有左、外和右选项
请注意,当执行
pd.merge(左,右)
时,如果左
有两行包含来自连接列或索引的相同值,则每行将与右
的相应行组合在笛卡尔产品中。另一方面,如果使用. concat()
来组合列,我们需要确保DataFrame
中没有重复的索引。
实际上:
考虑。CONTAUTE(<)/代码>在合并同名<代码>数据文件< /代码>时,同时考虑<代码>。合并()
在合并互补的数据帧时首先合并
参考:熊猫1. x食谱
一个非常高的级别差异是,merge()
用于根据公共列的值组合两个(或多个)数据帧(也可以使用索引,使用left_index=True
和/或right_index=True
),并且concat()
用于将一个(或多个)数据帧一个附加到另一个数据帧的下面(或侧向,取决于轴选项设置为0还是1)。
join()
用于根据索引合并2个数据帧;我们可以使用join()
,而不是使用带有选项left\u index=True
的merge()
。
例如:
df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
df1:
Key data1
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 a 5
6 b 6
df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)})
df2:
Key data2
0 a 0
1 b 1
2 d 2
#Merge
# The 2 dataframes are merged on the basis of values in column "Key" as it is
# a common column in 2 dataframes
pd.merge(df1, df2)
Key data1 data2
0 b 0 1
1 b 1 1
2 b 6 1
3 a 2 0
4 a 4 0
5 a 5 0
#Concat
# df2 dataframe is appended at the bottom of df1
pd.concat([df1, df2])
Key data1 data2
0 b 0 NaN
1 b 1 NaN
2 a 2 NaN
3 c 3 NaN
4 a 4 NaN
5 a 5 NaN
6 b 6 NaN
0 a Nan 0
1 b Nan 1
2 d Nan 2
在Lodash库中,是否有人可以更好地解释合并和扩展/分配。 这是一个简单的问题,但我还是没有回答。
问题内容: 我有一个4个熊猫数据框的列表,其中包含我想合并为一个数据框的一天的报价数据。我无法理解concat在时间戳上的行为。请参阅以下详细信息: 使用我得到: 使用我得到: 注意使用时索引如何变化。为什么会发生这种情况,我将如何使用该方法来重现使用所获得的结果?(因为看上去快得多;每个循环24.6 ms,而每个循环3.02 s) 问题答案: 因此,您正在执行的操作是append和concat
问题内容: 我正在尝试对数据框进行列绑定并遇到pandas的问题,因为它似乎不起作用: 结果是 即使我使用重置索引 然后尝试 它仍然产生相同的结果! 问题答案: 如果我正确理解您的意思,这就是您想要做的。 这使: 实际上,我期望得到相同的结果。 这是 jreback 的出色解释: “忽略”,表示未在连接轴上对齐。它只是按照传递的顺序将它们粘贴在一起,然后为实际索引(例如)重新分配一个范围,因此联接
问题内容: 如果我只是通过类似下面的函数,DataFrame.aggregate()和DataFrame.apply()函数之间的返回值的(类型)是否有任何区别 因为返回值看起来几乎一样。并且文档仅告诉: apply()-> apply:Series或DataFrame 聚合()->聚合:DataFrame 问题答案: agg有两种版本(aggregate的缩写)和适用:第一个版本在groupby
问题内容: 很快就有两个相等运算符:double equals( )和Triple equals( ),两者之间有什么区别? 问题答案: 简而言之: 操作员检查其实例值是否相等, 操作员检查引用是否指向同一实例, 长答案: 类是引用类型,可能有多个常量和变量在幕后引用类的同一单个实例。类引用保留在运行时堆栈(RTS)中,其实例保留在内存的堆区域中。当您控制平等时, 这意味着它们的实例是否彼此相等。
问题内容: Numpy似乎在和类型之间进行了区分。例如我可以做:: 其中dtype(’S’)和dtype(’O’)分别对应于和。 但是熊猫似乎就缺少了区分,并要挟到。:: 强制类型也无济于事。:: 此行为有任何解释吗? 问题答案: Numpy的字符串dtypes不是python字符串。 因此,故意使用本机python字符串,这需要对象dtype。 首先,让我演示一下numpy的字符串与众不同的含义