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 | 序列或映射。如果传递了映射,则排序的键将用作键参数, 除非传递,在这种情况下将选择值。 任何 除非它们都是 |
axis |
|
join |
|
ignore_index |
则不要沿连接轴使用索引值。结果轴将标记为 0, …, n - 1。 如要连接对象,而连接轴没有有意义的索引信息, 这将非常有用。请注意,连接中仍然尊重其他轴上的索引值。 |
keys | 键序列,默认 元组。使用传递的键作为最外层构建层次索引。 |
levels | 序列列表,默认 否则,它们将从密钥中推断出来。 |
names | 默认 |
verify_integrity | bool 布尔值,默认为 检查新的连接轴是否包含重复项。 相对于实际的数据连接,这可能非常昂贵。 |
sort | bool 布尔值,默认为 则对非连接轴进行排序。这在 join=‘inner’ 时无效, 它已经保留了非串联轴的顺序。在 1.0.0 版更改: 默认情况下更改为不排序。 |
copy |
则不要不必要地复制数据。 |
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)