python-3.x - 如何合并具有不同长度和索引的两个 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 |
+-------------------------------------------------------+
解决方案
您的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 列之一具有datetime
dtype,而一个具有object
dtype。
推荐阅读
- java - 在 Eclipse 中添加 .class 文件
- esper - 在 Esper 中计算具有燃烧期的递归 EMA
- linux - 了解 Redhat Yum 镜像问题
- ios - 检查按钮是否有设置图像
- javascript - React Setstate 在 JSON 化后使我的状态项未定义
- reactjs - 反应引导表不改变 sizePerPageList
- godot - 如何更改脚本中节点的位置?
- cuda - Cuda 分析器的“gld_transactions_per_request”指标中的事务和请求是什么?
- php - 如何在 PHP 中返回多个值?
- java - 没有名为 X 的 EntityManager 的持久性提供程序错误