如何用Python合并两个时间差10分钟、结构相似的CSV为DataFrame并补全缺失值
解决方案
实现逻辑
使用pandas的merge方法即可实现关联,默认无匹配的位置会自动填充NaN(即pandas中的空值),如果需要替换为0,调用fillna(0)方法即可。
你给出的期望输出实际是全外连接的效果(保留两个表的所有时间行),如果需要严格左连接(仅保留左表所有行,右表匹配不到的填空),调整how参数为left即可。
完整代码示例
import pandas as pd # 读取两个CSV文件,自动解析date列为时间类型 df_out1 = pd.read_csv('out1.csv', parse_dates=['date']) df_out2 = pd.read_csv('out2.csv', parse_dates=['date']) # 修正out2的列名拼写错误 df_out2 = df_out2.rename(columns={'curret': 'current'}) # 全外连接,实现你期望的保留所有时间行的效果 merged_df = pd.merge( left=df_out1, right=df_out2, on='date', # 以date列为关联键 how='outer' # 外连接保留两边所有行,若要左连接改为how='left' ) # 按时间升序排序 merged_df = merged_df.sort_values('date').reset_index(drop=True) # 【可选】将空值替换为0,不需要则注释掉该行 # merged_df = merged_df.fillna(0) print(merged_df)
输出结果
运行上述代码后输出的结果和你预期一致:
date speed current 0 2021-10-03 02:00:01 5.0 NaN 1 2021-10-03 02:00:02 5.2 32.012 2 2021-10-03 02:00:03 5.1 32.120 3 2021-10-03 02:00:04 NaN 32.500
如果你的实际数据中时间列不是完全精确匹配,可以改用
pd.merge_asof()方法实现按最近时间关联,避免匹配不到的情况。
内容的提问来源于stack exchange,提问作者Passi
相关产品推荐
相关产品推荐

