pandas 拼接
1. 概述
数据处理是数据分析的基础,而数据拼接是数据处理中的一个重要环节。在实际的数据分析工作中,经常会遇到需要将多个数据源进行拼接的情况,这时就需要用到 pandas 提供的拼接方法。
pandas 是 Python 中用于数据分析的强大库,它提供了多种方法来拼接不同数据源的数据。本文将详细介绍 pandas 中的拼接方法和使用示例。
2. 拼接方法
pandas 提供了三种常用的拼接方法,分别是 concat()
、merge()
和 join()
。下面将逐一介绍这些方法。
2.1 concat() 方法
concat()
方法用于按照指定的轴将多个数据源进行拼接。它的基本语法如下:
pandas.concat(objs, axis=0, join='outer', ignore_index=False)
其中,各参数的含义如下:
objs
:要拼接的 pandas 对象的序列,可以是 DataFrame、Series 或 Panel 对象。axis
:拼接的轴向,默认为 0,表示按行拼接。join
:拼接方式,可选值为 ‘inner’ 和 ‘outer’,默认为 ‘outer’。如果设置为 ‘inner’,则只保留相同索引或列名的数据。ignore_index
:是否忽略原始索引或列名,默认为 False。如果设置为 True,将重新生成新的索引或列名。
2.2 merge() 方法
merge()
方法用于根据一个或多个键(key)将两个数据源的列进行拼接。它的基本语法如下:
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None)
其中,各参数的含义如下:
left
和right
:要拼接的两个 DataFrame 对象。how
:拼接方式,可选值为 ‘inner’、’outer’、’left’ 和 ‘right’,默认为 ‘inner’。具体含义参见下文。on
:用于拼接的列名,如果两个 DataFrame 对象的列名不同,可以分别指定左右 DataFrame 对象的列名。left_on
和right_on
:用于拼接的左右 DataFrame 对象的列名,可分别指定。
2.3 join() 方法
join()
方法用于根据索引将两个数据源的列进行拼接。它的基本语法如下:
pandas.DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='')
其中,各参数的含义如下:
other
:要拼接的另一个 DataFrame 对象。on
:用于拼接的索引名。how
:拼接方式,可选值为 ‘left’、’right’、’inner’ 和 ‘outer’,默认为 ‘left’。具体含义参见下文。lsuffix
和rsuffix
:仅当两个 DataFrame 对象的列有重复时使用,用于区分重复列的后缀。
3. 拼接方式
上述拼接方法中的 how
参数对拼接方式进行了设置,可选值为 ‘inner’、’outer’、’left’ 和 ‘right’,下面将具体介绍这些拼接方式的含义。
3.1 inner
inner 拼接方式表示取两个数据源公共部分的交集。它将只拼接那些在两个数据源中都存在的行或列。
示例代码如下:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'B': [4, 7], 'C': [8, 9]})
result = pd.concat([df1, df2], axis=1, join='inner')
print(result)
运行结果为:
A B B C
0 1 4 4 8
3.2 outer
outer 拼接方式表示取两个数据源的并集。它将拼接那些在任意一个数据源中存在的行或列,不存在的部分用 NaN 填充。
示例代码如下:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'B': [4, 7], 'C': [8, 9]})
result = pd.concat([df1, df2], axis=1, join='outer')
print(result)
运行结果为:
A B B C
0 1.0 4 4.0 8.0
1 2.0 5 NaN NaN
2 3.0 6 NaN NaN
3 NaN 7 NaN 9.0
3.3 left
left 拼接方式表示取左边数据源的所有行或列,且包含右边数据源中匹配的部分。
示例代码如下:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'B': [4, 7], 'C': [8, 9]})
result = pd.merge(df1, df2, how='left', on='B')
print(result)
运行结果为:
A B C
0 1 4 8.0
1 2 5 NaN
2 3 6 NaN
3.4 right
right 拼接方式表示取右边数据源的所有行或列,且包含左边数据源中匹配的部分。
示例代码如下:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'B': [4, 7], 'C': [8, 9]})
result = pd.merge(df1, df2, how='right', on='B')
print(result)
运行结果为:
A B C
0 1.0 4 8
1 NaN 7 9