如何合并两个无数据丢失的DataFrame?时间范围及列结构存在差异
合并两个列名部分重叠、时间范围不同的DataFrame(无数据丢失)
嘿,我明白你要做的事情了——把两个时间范围不重叠、列名部分一致的DataFrame合并起来,还要保证所有数据都保留对吧?这在pandas里其实很容易实现,咱们一步步来:
步骤1:确保时间戳列是datetime类型
首先,你的两个DataFrame里的TimeStamp列目前是字符串格式,为了后续能正确处理时间顺序,咱们得先把它转换成pandas的datetime类型:
import pandas as pd # 假设你的DataFrame1叫df1,DataFrame2叫df2 df1['TimeStamp'] = pd.to_datetime(df1['TimeStamp']) df2['TimeStamp'] = pd.to_datetime(df2['TimeStamp'])
步骤2:使用concat函数合并(保留所有行和列)
因为咱们要保留所有观测值和所有变量,哪怕某个DataFrame里没有的列,用pd.concat()配合join='outer'就能实现,它会把两个DataFrame按行堆叠,缺失的列值自动用NaN填充:
merged_df = pd.concat([df1, df2], axis=0, join='outer', ignore_index=True)
这里的参数解释:
axis=0:按行方向合并(把df2放在df1下面)join='outer':保留所有列,不管两个DataFrame有没有共同列ignore_index=True:重置合并后的索引,避免出现重复的索引值
步骤3(可选):按时间戳排序
如果需要合并后的DataFrame按时间顺序排列,可以加这一步:
merged_df = merged_df.sort_values('TimeStamp').reset_index(drop=True)
示例验证
用你给出的示例数据来测试的话,合并后的结果会包含所有12行(3+9),以及所有9个列(A、B、C、D、E、F、G、H),df2里没有的G、H列会填充NaN,df1里原本有的数据则完整保留。
比如合并后的前几行大概是这样的:
| TimeStamp | A | B | C | D | E | F | G | H |
|---|---|---|---|---|---|---|---|---|
| 2017-06-06 00:00:00 | 71.94 | 71.94 | 79.06 | 54 | 44.684 | 40.996 | NaN | NaN |
| 2017-06-06 00:15:00 | 71.94 | 71.63 | 80.06 | 53 | 45.966 | 40.708 | NaN | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2018-01-15 00:00:00 | 49.9238 | 62.2187 | 0 | 52.3125 | 63.457 | 49 | 84 | 54 |
这样就完全满足你的需求啦——没有丢失任何数据,所有列和行都保留了!
内容的提问来源于stack exchange,提问作者Anagha
相关产品推荐
相关产品推荐

