如何使用 Pandas 的concat 函数来合并数据
Pandas 是一个强大的 Python 数据分析库,它提供了大量的功能来处理和分析数据。其中,concat()
函数是一个非常有用的工具,它允许用户沿着一定的轴将多个 DataFrame 或 Series 对象合并成一个新的 DataFrame。本文将详细介绍如何使用 Pandas 的 concat()
函数来合并数据,并提供多个示例代码来展示其用法。
1. Pandas Concat 基础
pandas.concat()
可以将两个或多个 pandas 对象合并成一个。它主要有几个参数:
– objs
: 一个列表或字典,里面包含了要合并的 pandas 对象。
– axis
: 合并的轴向,默认为 0,即纵向合并。设置为 1 时,进行横向合并。
– join
: 指定如何处理不同对象的索引。默认为 ‘outer’,即取并集;’inner’ 则是取交集。
– ignore_index
: 布尔值,默认为 False。如果为 True,则不使用原来的索索引,而是创建一个新的整数索引。
示例代码 1:基础的纵向合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
}, index=[0, 1])
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"B": ["B2", "B3"]
}, index=[2, 3])
# 纵向合并 DataFrame
result = pd.concat([df1, df2])
print(result)
Output:
示例代码 2:基础的横向合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"C": ["C0", "C1"],
"D": ["D0", "D1"]
})
# 横向合并 DataFrame
result = pd.concat([df1, df2], axis=1)
print(result)
Output:
2. 处理索引
在使用 concat()
函数时,处理索引是一个重要的方面。如果不同的 DataFrame 有重叠的索引,可能会导致数据的不一致。可以通过设置 ignore_index
参数来避免这种情况。
示例代码 3:忽略原索引进行合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"B": ["B2", "B3"]
})
# 忽略原索引,创建新的整数索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
示例代码 4:添加多层索引
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"B": ["B2", "B3"]
})
# 添加多层索引
result = pd.concat([df1, df2], keys=["df1", "df2"])
print(result)
Output:
3. 处理列不一致的情况
当合并的 DataFrame 列不一致时,concat()
函数提供了多种处理方式。通过 join
参数可以控制如何合并列。
示例代码 5:内连接合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"C": ["C2", "C3"]
})
# 只合并共有的列
result = pd.concat([df1, df2], join="inner")
print(result)
Output:
示例代码 6:外连接合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"C": ["C2", "C3"]
})
# 合并所有的列,不存在的填充 NaN
result = pd.concat([df1, df2], join="outer")
print(result)
Output:
4. 更复杂的合并场景
在实际应用中,我们可能会遇到更复杂的数据合并需求,比如合并多个 DataFrame,处理多层索引等。
示例代码 7:合并多个 DataFrame
import pandas as pd
# 创建三个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"B": ["B2", "B3"]
})
df3 = pd.DataFrame({
"A": ["A4", "A5"],
"B": ["B4", "B5"]
})
# 合并三个 DataFrame
result = pd.concat([df1, df2, df3])
print(result)
Output:
示例代码 8:合并时使用不同的 keys
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
"A": ["A0", "A1"],
"B": ["B0", "B1"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3"],
"B": ["B2", "B3"]
})
# 使用不同的 keys 进行合并,便于区分来源
result = pd.concat([df1, df2], keys=["来源1", "来源2"])
print(result)
Output:
5. 总结
Pandas 的 concat()
函数是一个非常强大的工具,可以帮助我们在不同的场景下合并数据。通过正确使用 axis
, join
, ignore_index
等参数,我们可以处理各种复杂的数据合并需求。