如何用Pandas实现多数据集合并并保留公共列与唯一行
实现方案
首先修正初始代码的笔误(data3 == pd.read_csv 多写了一个等号,改为单等号),再按如下代码实现需求:
import pandas as pd import numpy as np # 读取数据集 data1 = pd.read_csv('dataset1.csv', low_memory=False) data2 = pd.read_csv('dataset2.csv', low_memory=False) data3 = pd.read_csv('dataset3.csv', low_memory=False) # 统一时间列名,解决data2、data3时间列大写、data1时间列小写的不一致问题 data2 = data2.rename(columns={'Date':'date'}) data3 = data3.rename(columns={'Date':'date'}) # 计算三个数据集的公共列,保持列顺序和data1一致,自动过滤非共有列 common_cols = [col for col in data1.columns if col in data2.columns and col in data3.columns] data1_common = data1[common_cols] data2_common = data2[common_cols] data3_common = data3[common_cols] # 纵向合并三个数据集 all_data = pd.concat([data1_common, data2_common, data3_common], ignore_index=True) # 按Unix时间戳去重,重复时间仅保留一条记录 all_data = all_data.drop_duplicates(subset='Unix Timestamp', keep='first') # 按时间升序排序 all_data = all_data.sort_values(by='Unix Timestamp', ascending=True, ignore_index=True) # 打印结果,如需保存可取消注释下一行 # all_data.to_csv('merged_result.csv', index=False) print(all_data)
代码逻辑说明
- 统一列名是为了避免大小写差异导致公共列识别错误,确保
date列被判定为共有列 - 公共列计算使用列表推导式,保留了和data1一致的列顺序,输出结果和样例预期格式完全匹配
- 去重、排序都使用Unix时间戳作为判断依据,比字符串格式的
date列精度更高,不会出现格式兼容问题 - 处理后的结果自动过滤了data1独有的
Low列,删除了重复的2021-10-21 00:03:00记录,且按时间升序排列,完全符合需求
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

