如何使用 pandas 的concat函数来合并多个数据框
参考:pandas concat multiple dataframes
在数据分析和数据处理中,经常需要将多个数据框(DataFrame)合并为一个。Pandas 提供了一个非常有用的函数 concat()
,可以轻松地实现多个数据框的合并。本文将详细介绍如何使用 pandas 的 concat()
函数来合并多个数据框,并提供多个示例代码来展示不同的使用场景。
1. pandas concat()
函数基础
concat()
函数是 pandas 中用于合并两个或多个 pandas 数据框的主要工具。基本语法如下:
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
objs
: 需要合并的数据框列表或字典。axis
: 合并的轴向,默认为0,表示纵向合并;设置为1表示横向合并。join
: 指定如何处理不同数据框的索引。outer
表示取并集,inner
表示取交集。ignore_index
: 布尔值,是否忽略原来的索引。keys
: 创建一个多级索引,用给定的键作为外层索引。verify_integrity
: 检查新的合并的数据框是否包含重复的索引。sort
: 是否在合并时对索引进行排序。copy
: 是否复制数据,默认为 True。
示例代码 1:基本的纵向合并
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"]
}, index=[3, 4, 5])
# 使用 concat 进行合并
result = pd.concat([df1, df2])
print(result)
Output:
示例代码 2:忽略原索引进行合并
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
})
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"]
})
# 使用 concat 进行合并,忽略原来的索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
示例代码 3:横向合并数据框
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
})
df2 = pd.DataFrame({
"C": ["C0", "C1", "C2"],
"D": ["D0", "D1", "D2"]
})
# 使用 concat 进行横向合并
result = pd.concat([df1, df2], axis=1)
print(result)
Output:
示例代码 4:使用 keys 参数创建多级索引
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
})
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"]
})
# 使用 keys 参数进行合并,创建多级索引
result = pd.concat([df1, df2], keys=['pandasdataframe.com1', 'pandasdataframe.com2'])
print(result)
Output:
示例代码 5:合并时使用内连接
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
})
df2 = pd.DataFrame({
"A": ["A2", "A3", "A4"],
"B": ["B2", "B3", "B4"]
})
# 使用内连接进行合并
result = pd.concat([df1, df2], join='inner')
print(result)
Output:
2. 处理不同列名的数据框
在实际应用中,我们可能遇到需要合并的数据框具有不同的列名。这时,concat()
函数提供了灵活的处理方式,可以通过设置不同的参数来应对这种情况。
示例代码 6:合并具有不同列名的数据框
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
})
df2 = pd.DataFrame({
"C": ["C0", "C1", "C2"],
"D": ["D0", "D1", "D2"]
})
# 使用 concat 进行合并,处理不同的列名
result = pd.concat([df1, df2], sort=False)
print(result)
Output:
示例代码 7:合并时只包含共有的列
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
})
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"C": ["C3", "C4", "C5"]
})
# 使用内连接进行合并,只包含共有的列
result = pd.concat([df1, df2], join='inner')
print(result)
Output:
3. 高级应用
concat()
函数的灵活性还体现在它可以处理更复杂的数据结构,如多级索引的数据框。此外,通过合理设置参数,可以有效地处理大数据集的合并,优化内存使用和计算效率。
示例代码 8:合并具有多级索引的数据框
import pandas as pd
# 创建具有多级索引的数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
}).set_index(["A", "B"])
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"]
}).set_index(["A", "B"])
# 使用 concat 进行合并
result = pd.concat([df1, df2])
print(result)
Output:
示例代码 9:在合并大数据集时优化内存使用
import pandas as pd
# 创建大数据集示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"] * 1000,
"B": ["B0", "B1", "B2"] * 1000
})
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"] * 1000,
"B": ["B3", "B4", "B5"] * 1000
})
# 使用 concat 进行合并,优化内存使用
result = pd.concat([df1, df2], copy=False)
print(result)
Output:
示例代码 10:合并时保留特定的列
import pandas as pd
# 创建示例数据框
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"],
"C": ["C0", "C1", "C2"]
})
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"],
"D": ["D0", "D1", "D2"]
})
# 使用 concat 进行合并,保留特定的列
result = pd.concat([df1[['A', 'B']], df2[['A', 'B']]])
print(result)
Output:
4. 错误处理和异常
在使用 concat()
函数合并数据框时,可能会遇到各种错误和异常,如索引重复、数据类型不匹配等。了解如何处理这些异常是进行有效数据合并的关键。
示例代码 11:处理索引重复的情况
import pandas as pd
# 创建示例数据框,故意制造索引重复
df1 = pd.DataFrame({
"A": ["A0", "A1", "A2"],
"B": ["B0", "B1", "B2"]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"]
}, index=[2, 3, 4])
# 使用 concat 进行合并,检查索引重复
try:
result = pd.concat([df1, df2], verify_integrity=True)
print(result)
except ValueError as e:
print("Error:", e)
Output:
示例代码 12:处理数据类型不匹配的情况
import pandas as pd
# 创建示例数据框,数据类型不匹配
df1 = pd.DataFrame({
"A": [1, 2, 3],
"B": [4, 5, 6]
})
df2 = pd.DataFrame({
"A": ["A3", "A4", "A5"],
"B": ["B3", "B4", "B5"]
})
# 使用 concat 进行合并,处理数据类型不匹配
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
5. 总结
本文详细介绍了如何使用 pandas 的 concat()
函数来合并多个数据框。通过多个示例代码,我们展示了 concat()
函数的基本用法、处理不同列名和数据类型的方法,以及如何优化内存使用和处理异常。掌握这些技巧将有助于在数据分析和数据处理中有效地合并数据,提高工作效率。