如何使用 Pandas 中的concat函数将 Series 对象合并到 DataFrame 中
参考:pandas concat series to dataframe
在数据处理和分析中,经常需要将不同的数据源合并到一起,以便进行更全面的分析。Pandas 是 Python 中一个强大的数据分析工具包,它提供了多种数据结构和数据操作方法,使得数据操作更加便捷。本文将详细介绍如何使用 Pandas 中的 concat
函数将 Series 对象合并到 DataFrame 中。
1. 简介
在 Pandas 中,DataFrame
是用于存储表格数据的主要数据结构,而 Series
是一种一维数组结构,可以视为 DataFrame
的单一列。concat
函数是 Pandas 提供的一个功能强大的工具,可以用来沿着一定的轴将多个 pandas 对象合并到一起。使用 concat
函数可以轻松地将多个 Series 合并到一个 DataFrame 中,无论是横向还是纵向。
2. 函数语法和参数
concat
函数的基本语法如下:
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
主要参数解释:
– objs
: 一个序列或映射,这里应该是包含多个 pandas 对象的列表。
– axis
: {0/’index’, 1/’columns’}, 默认为 0。定义合并的方向。
– join
: {‘inner’, ‘outer’}, 默认为 ‘outer’。定义如何处理不同对象的索引。
– ignore_index
: 布尔值,默认为 False。如果为 True,则不使用索引值,而是创建一个新的范围索引。
– keys
: 序列,默认为 None。如果传递了序列,则创建一个多级索引。
– verify_integrity
: 布尔值,默认为 False。检查新连接的轴是否包含重复项。
– sort
: 布尔值,默认为 False。在沿轴连接时排序。
3. 将 Series 纵向合并到 DataFrame
示例代码 1: 基本纵向合并
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 纵向合并
result = pd.concat([df, s.to_frame().T])
print(result)
Output:
示例代码 2: 忽略原有索引,创建新索引
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 纵向合并,忽略索引
result = pd.concat([df, s.to_frame().T], ignore_index=True)
print(result)
Output:
示例代码 3: 使用 keys 创建多级索引
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 使用 keys 参数
result = pd.concat([df, s.to_frame().T], keys=['DataFrame', 'Series'])
print(result)
Output:
4. 将 Series 横向合并到 DataFrame
示例代码 4: 基本横向合并
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'C': [1, 2, 3],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 横向合并
result = pd.concat([df, s.to_frame().T], axis=1)
print(result)
Output:
示例代码 5: 横向合并并处理不匹配的索引
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'C': [1, 2, 3],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 横向合并,处理不匹配的索引
result = pd.concat([df, s.to_frame().T], axis=1, join='inner')
print(result)
Output:
示例代码 6: 使用 ignore_index 在横向合并时重置列索引
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'C': [1, 2, 3],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 横向合并,重置列索引
result = pd.concat([df, s.to_frame().T], axis=1, ignore_index=True)
print(result)
Output:
5. 使用 concat 的高级功能
示例代码 7: 验证数据完整性
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 验证数据完整性
result = pd.concat([df1, df2], verify_integrity=True)
print(result)
示例代码 8: 使用 sort 参数
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'B': [1, 2, 3],
'A': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'D': [4, 5, 6],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 使用 sort 参数
result = pd.concat([df1, df2], sort=True)
print(result)
Output:
示例代码 9: 使用 keys 和 names 参数
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 使用 keys 和 names 参数
result = pd.concat([df1, df2], keys=['First', 'Second'], names=['Source', 'Row ID'])
print(result)
Output:
示例代码 10: 合并多个 Series 为 DataFrame
import pandas as pd
# 创建多个 Series
s1 = pd.Series([1, 2, 3], name='A')
s2 = pd.Series(['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'], name='B')
# 合并为 DataFrame
result = pd.concat([s1, s2], axis=1)
print(result)
Output:
示例代码 11: 处理具有不同索引的 Series
import pandas as pd
# 创建具有不同索引的 Series
s1 = pd.Series([1, 2, 3], index=[1, 2, 3], name='A')
s2 = pd.Series(['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'], index=[4, 5, 6], name='B')
# 合并为 DataFrame,使用外连接
result = pd.concat([s1, s2], axis=1, join='outer')
print(result)
Output:
示例代码 12: 使用 ignore_index 在纵向合并时重置行索引
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 纵向合并,重置行索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
示例代码 13: 合并时使用不同的 join 类型
import pandas as pd
# 创建两个 DataFrame,具有部分重叠的列
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'B': [4, 5, 6],
'C': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 使用内连接
result = pd.concat([df1, df2], join='inner')
print(result)
Output:
示例代码 14: 使用多级索引进行更复杂的合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 使用 keys 创建多级索引
result = pd.concat([df1, df2], keys=['Set1', 'Set2'])
print(result)
Output:
示例代码 15: 在横向合并时处理不同长度的 DataFrame
import pandas as pd
# 创建两个不同长度的 DataFrame
df1 = pd.DataFrame({
'A': [1, 2],
'B': ['pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'C': [3, 4, 5],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 横向合并,使用外连接
result = pd.concat([df1, df2], axis=1, join='outer')
print(result)
Output:
示例代码 16: 合并具有相同列但不同顺序的 DataFrame
import pandas as pd
# 创建两个具有相同列但顺序不同的 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'B': [4, 5, 6],
'A': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 合并 DataFrame
result = pd.concat([df1, df2])
print(result)
Output:
示例代码 17: 使用 concat 的 copy 参数
import pandas as pd
# 创建一个 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 创建一个 Series
s = pd.Series([4, 'pandasdataframe.com'], index=['A', 'B'])
# 横向合并,不复制数据
result = pd.concat([df, s.to_frame().T], axis=1, copy=False)
print(result)
Output:
示例代码 18: 在纵向合并时处理具有不同列的 DataFrame
import pandas as pd
# 创建两个具有不同列的 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'C': [4, 5, 6],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 纵向合并,使用外连接
result = pd.concat([df1, df2], axis=0, join='outer')
print(result)
Output:
示例代码 19: 在横向合并时使用 keys 参数
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'C': [4, 5, 6],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 横向合并,使用 keys 参数
result = pd.concat([df1, df2], axis=1, keys=['First', 'Second'])
print(result)
Output:
示例代码 20: 在纵向合并时使用 sort 参数
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 纵向合并,使用 sort 参数
result = pd.concat([df1, df2], sort=False)
print(result)
Output:
这段代码展示了如何使用 sort
参数在合并时控制是否对列进行排序。在这个例子中,sort=False
表示合并后的 DataFrame 将保持输入 DataFrame 的列顺序。
示例代码 21: 使用验证参数检查合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 使用验证参数
try:
result = pd.concat([df1, df2], verify_integrity=True)
print(result)
except ValueError as e:
print("ValueError:", e)
Output:
这段代码使用 verify_integrity
参数来检查合并过程中是否会产生重复的索引。如果有重复,将抛出一个 ValueError
。
示例代码 22: 合并时使用不同的 axis 参数
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'C': [4, 5, 6],
'D': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 横向合并
result = pd.concat([df1, df2], axis=1)
print(result)
Output:
这段代码展示了如何使用 axis=1
参数进行横向合并,将两个 DataFrame 的列并排放置。
示例代码 23: 使用 append 方法简化合并
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 使用 append 方法进行合并
result = df1.append(df2)
print(result)
append
方法是 concat
函数的简化形式,专门用于纵向合并 DataFrame。
示例代码 24: 在合并时处理重复列名
import pandas as pd
# 创建两个 DataFrame,具有重复的列名
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
df2 = pd.DataFrame({
'A': [4, 5, 6],
'B': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com']
})
# 合并并处理重复列名
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
这段代码通过 ignore_index=True
参数重置索引,从而避免在合并时出现重复的索引问题。
以上示例提供了多种使用 pandas 进行数据合并的方法和技巧,帮助你根据不同的数据处理需求选择合适的工具和参数。