
在 pandas 中,pd.merge 和 pd.concat 都是用于组合 dataframe 的强大工具,但它们的设计理念和应用场景有所不同。
有时,出于性能、内存管理或特定数据处理逻辑的考虑,我们可能希望使用 pd.concat 来实现类似 pd.merge 的功能,尤其是在合并基于日期时间等精确匹配的列时。通过将合并键设置为 DataFrame 的索引,pd.concat 可以在索引级别进行高效对齐。
当使用 pd.concat 进行横向合并(axis=1)时,其核心思想是将作为合并键的列提升为 DataFrame 的索引。这样,pd.concat 就能利用索引的高效查找机制来对齐数据。这个过程通常包含三个关键步骤:
假设我们有三个 DataFrame:ads_hour、ads 和 advertising,它们包含日期时间信息,我们需要将它们进行合并。
原始数据模拟:
import pandas as pd
# 模拟数据
data_ads_hour = {'Date': ['2023-01-01 10:00:00', '2023-01-01 11:00:00', '2023-01-02 12:00:00'],
'Impressions': [100, 120, 150]}
ads_hour = pd.DataFrame(data_ads_hour)
data_ads = {'Time': ['2023-01-01 10:00:00', '2023-01-01 11:00:00', '2023-01-03 13:00:00'],
'Clicks': [10, 15, 20]}
ads = pd.DataFrame(data_ads)
data_advertising = {'TV': ['2023-01-01 10:00:00', '2023-01-01 11:00:00', '2023-01-02 12:00:00'],
'Spend': [500, 600, 700]}
advertising = pd.DataFrame(data_advertising)
print("原始 ads_hour:\n", ads_hour)
print("\n原始 ads:\n", ads)
print("\n原始 advertising:\n", advertising)使用 pd.concat 进行合并:
# 1. 确保所有用于合并的日期时间列为 datetime 类型
ads_hour['Date'] = pd.to_datetime(ads_hour['Date'], errors='coerce')
ads['Time'] = pd.to_datetime(ads['Time'], errors='coerce')
advertising['TV'] = pd.to_datetime(advertising['TV'], errors='coerce')
# 2. 第一次合并:ads_hour 和 ads
# 目标:将 ads_hour 的 'Date' 列与 ads 的 'Time' 列进行合并
merged_ads_hour_ads = pd.concat(
[ads_hour.set_index('Date'), ads.set_index('Time')], # 将合并键设置为索引以上就是Pandas pd.concat 合并策略:处理日期时间列的进阶指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号