首页 > 解决方案 > 如何合并具有不同长度和索引的两个 DataFrame 是另一个的子集,但它们的数据类型不同?

问题描述

我需要合并这两个 DataFrame。

+-------------------------------------+--+
|                df1:                 |  |
+-------------------------------------+--+
| Date           Temperature     Load |  |
| 01-01-2019      25              400 |  |
| 02-01-2019      32              487 |  |
| 03-01-2019      35              501 |  |
| 04-01-2019      28              457 |  |
| '               '               '   |  |
| '               '               '   |  |
| '               '               '   |  |
| 31-12-2019      22              385 |  |
+-------------------------------------+--+
+----------------------------------+
|               df2:               |
+----------------------------------+
| Date          Holiday            |
| 02-03-2019    Mahashivratri      |
| 14-04-2019    Good Friday        |
| 18-09-2019    Ganesh Chaturthi   |
| '               '                |
| '               '                |
| 25-12-2019    Christmas          |
+----------------------------------+    

我尝试了合并方法。

final = df1.merge(df2, on='Date', how='left')

我也类似地尝试了 join 方法。

final = df1.join(df2, on='Date', how='left')

在这两种情况下,'Holiday' 列都被附加到 df1,但它的所有值都是 NaN。

+-------------------------------------------------+
|                      final:                       |
+-------------------------------------------------+
| Date           Temperature     Load     Holiday |
| 01-01-2019      25              400     NaN     |
| 02-01-2019      32              487     Nan     |
| '               '               '       '       |
| '               '               '       '       |
| 02-03-2019      33              510     NaN     |
| '               '               '       '       |
| '               '               '       '       |
| 31-12-2019      22              385     NaN     |
+-------------------------------------------------+

我想要实现的是:

+-------------------------------------------------------+
|                        final:                         |
+-------------------------------------------------------+
| Date           Temperature     Load     Holiday       |
| 01-01-2019      25              400     NaN           |
| 02-01-2019      32              487     Nan           |
| '               '               '       '             |
| '               '               '       '             |
| 02-03-2019      33              510     Mahashivratri |
| '               '               '       '             |
| '               '               '       '             |
| 31-12-2019      22              385     NaN           |
+-------------------------------------------------------+

标签: python-3.xpandasdataframe

解决方案


您的merge命令是正确的并且运行良好:

df1 = pd.DataFrame({'Date': ['01-01-2019', '02-03-2019'], 'Temperature': [25,32], 'Load': [400, 501]})
df2 = pd.DataFrame({'Date': ['02-03-2019', '14-04-2019'], 'Holiday': ['Mahashivratri', 'Good Friday']})
df1.merge(df2, on='Date', how='left')

它给出了预期的结果:

         Date  Temperature  Load        Holiday
0  01-01-2019           25   400            NaN
1  02-03-2019           32   501  Mahashivratri

问题可能出在您的Date列的 dtype 上。你没有向我们展示那是什么,但那是你需要看的地方,因为其余的都是正确的。

下次请发布一个独立的可运行示例程序,就像我上面所做的那样。如果您在这里这样做,您可能会自己解决您的问题,因为您的数据实际上并不是您认为的那样。我敢打赌,您的 Date 列之一具有datetimedtype,而一个具有objectdtype。


推荐阅读