
在数据处理和分析中,我们经常会遇到需要比较两个数据集并根据一个数据集的信息更新另一个数据集的场景。例如,你可能有一个包含现有产品信息的 csv 文件(one.csv),以及一个包含最新价格更新的更大 csv 文件(two.csv)。我们的目标是找出 one.csv 中所有在 two.csv 中也存在的供应商代码,并用 two.csv 中的最新成本价格来更新这些记录。
一个常见的初步想法是使用 isin() 方法来筛选第一个 DataFrame。例如:
import pandas as pd
# 假设从CSV读取数据
# one = pd.read_csv('one.csv')
# two = pd.read_csv('two.csv')
# 示例数据
dict_one = {"Supplier Code": [1, 2, 3], "Cost Price": [2.25, 1.25, 3.25]}
dict_two = {"Supplier Code": [1, 2, 3, 5], "Cost Price": [2.25, 1.75, 3.75, 1.25]}
df_one = pd.DataFrame(dict_one)
df_two = pd.DataFrame(dict_two)
# 尝试使用 isin()
present_in_two = df_one[df_one['Supplier Code'].isin(df_two['Supplier Code'])]
print(present_in_two)运行上述代码,你可能会发现输出结果如下:
Supplier Code Cost Price 0 1 2.25 1 2 1.25 2 3 3.25
这个结果虽然找到了在 df_two 中存在的 Supplier Code,但它返回的是 df_one 中对应的 Cost Price,而不是我们期望的来自 df_two 的最新 Cost Price。因此,isin() 仅用于筛选,无法直接实现基于另一个 DataFrame 的值更新。
为了实现我们的目标——找到共同的 Supplier Code 并从 df_two 获取最新的 Cost Price,pd.merge() 函数是最佳选择。merge 操作允许我们根据一个或多个键列将两个 DataFrame 连接起来。
以下是实现此功能的代码:
import pandas as pd
# 1. 准备示例数据(实际应用中将从CSV文件读取)
# one.csv 的内容
# Supplier Code,Cost Price
# 1,2.25
# 2,1.25
# 3,3.25
# two.csv 的内容
# Supplier Code,Cost Price
# 1,2.25
# 2,1.75
# 3,3.75
# 5,1.25
# 模拟从CSV读取数据
# df_one = pd.read_csv('one.csv')
# df_two = pd.read_csv('two.csv')
# 使用字典创建 DataFrame 以便代码可直接运行和测试
dict_one = {"Supplier Code": [1, 2, 3], "Cost Price": [2.25, 1.25, 3.25]}
dict_two = {"Supplier Code": [1, 2, 3, 5], "Cost Price": [2.25, 1.75, 3.75, 1.25]}
df_one = pd.DataFrame(dict_one)
df_two = pd.DataFrame(dict_two)
print("df_one (原始数据):")
print(df_one)
print("\ndf_two (更新数据源):")
print(df_two)
# 2. 合并两个 DataFrame
# 关键在于:
# - 从 df_one 中只选择 'Supplier Code' 列,确保我们只关心 df_one 中存在的供应商。
# - 与 df_two 进行合并,'on="Supplier Code"' 指定合并的键。
# - 默认的 merge 类型是 'inner',这意味着只有在两个 DataFrame 中都存在的键才会被保留。
df_merged = pd.merge(df_one[["Supplier Code"]], df_two, on="Supplier Code")
print("\n合并后的结果:")
print(df_merged)
# 3. 将结果输出到 CSV 文件
output_filename = "updated_prices.csv"
df_merged.to_csv(output_filename, index=False)
print(f"\n结果已保存到 {output_filename}")代码解释:
预期输出:
Supplier Code Cost Price 0 1 2.25 1 2 1.75 2 3 3.75
这个结果正是我们所期望的:它包含了 df_one 中所有在 df_two 中也存在的供应商代码,并且它们的 Cost Price 已更新为 df_two 中的值。
通过 pd.merge() 函数,我们可以优雅而高效地解决两个 CSV 文件之间的数据比较和更新问题。通过精确选择要合并的列和理解合并类型,可以灵活地处理各种数据集成场景。这种方法不仅功能强大,而且在处理大规模数据集时表现出良好的性能,是 Pandas 数据处理工具箱中的一个重要组成部分。
以上就是使用 Pandas 高效比较与合并 CSV 文件:基于关键列更新数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号