Python Pandas 是一个强大的工具,可用于数据分析和机器学习。其中数据整合是将来自不同来源的数据组合到一起的过程。数据整合通常涉及到数据合并(Merge)、连接(Join)和拼接(Concatenate)等。数据整合对于数据分析和数据处理非常重要,可以将分散的数据集汇总成一个统一的数据集,以便进行更深入的分析。

1、数据合并

数据合并是指将两个数据集合并为一个数据集的过程。数据集的列名和数据类型是否一致。如果不一致,需要进行数据类型转换或重命名。数据集的索引是否一致。如果不一致,需要进行索引重置或合并。数据集的缺失值处理。可以使用均值、中位数或众数填充缺失值,也可以删除缺失值。

1)merge()

根据一个或多个键将不同的 DataFrame 合并在一起,类似于 SQL 中的 JOIN 操作。

相关文档:

Python pandas 合并两个或多个DataFrame的方法代码

Python pandas merge(join) 通过单列或多列合并连接两个DataFrame

Python DataFrame 全连接(full join)的方法及示例代码

Python pandas join 交叉连接(cross join)的使用及示例代码

Python pandas 实现两个DataFrame连接(INNER (LEFT RIGHT FULL) OUTER) join

import pandas as pd

# 创建示例 DataFrame
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2'], 'A': ['A0', 'A1', 'A2']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2'], 'B': ['B0', 'B1', 'B2']})

# 基本合并 将两个 DataFrame 根据一个或多个键合并。默认情况下,它执行的是内合并(inner join)。
merged_df = pd.merge(df1, df2, on='key')
print("基本合并:\n", merged_df)

# 内合并 返回两个 DataFrame 中都有键的行。
inner_merged_df = pd.merge(df1, df2, on='key', how='inner')
print("内合并:\n", inner_merged_df)

# 外合并 返回两个 DataFrame 中任一存在键的行。
outer_merged_df = pd.merge(df1, df2, on='key', how='outer')
print("外合并:\n", outer_merged_df)

# 左合并 返回左侧 DataFrame 中的所有行,以及右侧 DataFrame 中的匹配行。
left_merged_df = pd.merge(df1, df2, on='key', how='left')
print("左合并:\n", left_merged_df)

# 右合并 返回右侧 DataFrame 中的所有行,以及左侧 DataFrame 中的匹配行。
right_merged_df = pd.merge(df1, df2, on='key', how='right')
print("右合并:\n", right_merged_df)

2)concat()

concat() 函数是一种非常灵活的数据拼接工具,用于沿指定轴将多个 pandas 对象(如 Series 和 DataFrame)堆叠在一起。这个函数对于组合具有相同或相似结构的数据集特别有用。

pandas.concat(objs, axis=0, join=‘outer’, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

参数

描述

objs

序列或映射。如果传递了映射,则排序的键将用作键参数,

除非传递,在这种情况下将选择值。

任何 None 对象都将被静默删除,

除非它们都是 None 在这种情况下将引发 ValueError

axis

{0/‘index’, 1/‘columns’},默认0。要连接的轴。

join

{‘inner’, ‘outer’}, 默认‘outer’。如何处理其他轴(或轴)上的索引。

ignore_index

bool,默认为 False。如果为 True

则不要沿连接轴使用索引值。结果轴将标记为 0, …, n - 1。

如要连接对象,而连接轴没有有意义的索引信息,

这将非常有用。请注意,连接中仍然尊重其他轴上的索引值。

keys

键序列,默认None。如果通过了多个级别,则应包含

元组。使用传递的键作为最外层构建层次索引。

levels

序列列表,默认None。用于构造 MultiIndex 的特定级别(唯一值)。

否则,它们将从密钥中推断出来。

names

默认None。生成的分层索引中的级别名称。

verify_integrity

bool 布尔值,默认为 False

检查新的连接轴是否包含重复项。

相对于实际的数据连接,这可能非常昂贵。

sort

bool 布尔值,默认为 False。如果连接为“外部”时尚未对齐,

则对非连接轴进行排序。这在 join=‘inner’ 时无效,

它已经保留了非串联轴的顺序。在 1.0.0 版更改: 默认情况下更改为不排序。

copy

bool 布尔值,默认 True。如果为 False

则不要不必要地复制数据。

concat() 函数中,默认情况下沿着轴 0(行)进行垂直堆叠,而设置 axis=1 实现水平堆叠(并排放置数据集),同时提供选项以在堆叠过程中保留原始索引(ignore_index=False)或重置索引(ignore_index=True),并允许在拼接的对象列不完全对齐时选择外连接(保留所有列)或内连接(仅保留共同列)

import pandas as pd

# 创建示例 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1'], 'B': ['B0', 'B1']})
df2 = pd.DataFrame({'A': ['A2', 'A3'], 'C': ['C2', 'C3']})

# 垂直堆叠
vertical_concat = pd.concat([df1, df2])

# 水平堆叠
horizontal_concat = pd.concat([df1, df2], axis=1)

# 重置索引
reset_index_concat = pd.concat([df1, df2], ignore_index=True)

# 外连接和内连接
outer_concat = pd.concat([df1, df2], join='outer')
inner_concat = pd.concat([df1, df2], join='inner')

print("垂直堆叠:\n", vertical_concat)
print("水平堆叠:\n", horizontal_concat)
print("重置索引:\n", reset_index_concat)
print("外连接:\n", outer_concat)
print("内连接:\n", inner_concat)

2、数据连接

使用 join() 方法将不同的 DataFrame 根据索引连接在一起。根据索引或指定的列合并数据集,对于数据分析和处理非常重要。数据连接是指将两个数据集合并为一个数据集的过程,但与数据合并不同的是,数据连接是基于索引的匹配,而不是基于列的匹配。

参考文档:Python Pandas pandas.DataFrame.join函数方法的使用

import pandas as pd

# 创建示例 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']},
                    index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'C': ['C0', 'C2', 'C3'],
                    'D': ['D0', 'D2', 'D3']},
                    index=['K0', 'K2', 'K3'])

# 默认左连接
left_joined = df1.join(df2)

# 外连接
outer_joined = df1.join(df2, how='outer')

# 内连接
inner_joined = df1.join(df2, how='inner')

# 右连接
right_joined = df1.join(df2, how='right')

print("左连接:\n", left_joined)
print("外连接:\n", outer_joined)
print("内连接:\n", inner_joined)
print("右连接:\n", right_joined)

3、分组与聚合

分组与聚合是数据整合的关键部分,主要涉及使用 groupby() 方法对数据进行分组,然后应用聚合函数来计算统计信息或其他操作。对于理解数据集的特定子集和进行复杂的数据分析非常重要。Pandas 的分组与聚合对于从数据中提取有意义的信息非常有用。

参考文档:Python pandas.DataFrame.groupby函数方法的使用

import pandas as pd

# 创建示例 DataFrame
df = pd.DataFrame({'Category': ['C', 'Java', 'C', 'Java',"Python","Python"],
                   'Values': [10, 20, 30, 40, 100,80]})

# 分组
grouped = df.groupby('Category')

# 聚合:求和
summed = grouped.sum()

# 聚合:多个函数
multi_aggregated = grouped.agg(['sum', 'mean', 'std'])

print("分组求和:\n", summed)
print("多重聚合:\n", multi_aggregated)

推荐文档