我正在尝试合并 3 个具有公共日期列(用作索引)的数据帧
第一个数据帧包含空气污染物和降水的一些值:
╔════════════╦═══════════════╦═════════╦═════════╦═════╦═════════╦═════╗
║ DATE ║ PRECIPITATION ║ PM 10 ║ PM 2.5 ║ NO2 ║ SO2 ║ CO ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-01 ║ 0.0 ║ 129.2 ║ 49.3 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-02 ║ -9999.0 ║ -9999.0 ║ -9999.0 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-03 ║ -9999.0 ║ NaN ║ -9999.0 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-04 ║ -9999.0 ║ -9999.0 ║ -9999.0 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-05 ║ NaN ║ NaN ║ NaN ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-06 ║ -9999.0 ║ -9999.0 ║ -9999.0 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-07 ║ 2.7 ║ 78.1 ║ 24.4 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-08 ║ 5.3 ║ 99.9 ║ 31.1 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-09 ║ 0.1 ║ 116.5 ║ 36.3 ║ NaN ║ -9999.0 ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-10 ║ 0.0 ║ 100.2 ║ 30.8 ║ NaN ║ 5.0 ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-11 ║ 0.0 ║ 113.3 ║ 34.5 ║ NaN ║ 4.4 ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-12 ║ 0.0 ║ 85.4 ║ 28.6 ║ NaN ║ 3.2 ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-13 ║ 0.0 ║ 55.7 ║ 16.6 ║ NaN ║ 2.7 ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-14 ║ 5.0 ║ 89.6 ║ 27.4 ║ NaN ║ 3.8 ║ NaN ║
╠════════════╬═══════════════╬═════════╬═════════╬═════╬═════════╬═════╣
║ 2009-01-15 ║ 1.0 ║ 109.9 ║ 32.2 ║ NaN ║ 4.6 ║ NaN ║
╚════════════╩═══════════════╩═════════╩═════════╩═════╩═════════╩═════╝
。日期一直持续到2009-12-31
第二个数据帧包含最大、最小和平均温度值:
╔════════════╦═════════╦══════╦══════════╗
║ DATE ║ min ║ max ║ avg ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-01 ║ 10.1 ║ 13.1 ║ 11.47 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-02 ║ 13.3 ║ 18.7 ║ 16.38 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-03 ║ -9999.0 ║ 13.1 ║ -2490.10 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-04 ║ NaN ║ NaN ║ NaN ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-05 ║ -9999.0 ║ 20.8 ║ -698.73 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-06 ║ 11.4 ║ 17.9 ║ 14.64 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-07 ║ 11.2 ║ 18.9 ║ 14.60 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-08 ║ 10.2 ║ 19.1 ║ 14.65 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-09 ║ 9.4 ║ 18.4 ║ 14.05 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-10 ║ 9.2 ║ 20.7 ║ 13.85 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-11 ║ 9.7 ║ 17.8 ║ 14.32 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-12 ║ 12.4 ║ 17.8 ║ 14.83 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-13 ║ 12.4 ║ 17.1 ║ 14.51 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-14 ║ 7.0 ║ 19.7 ║ 13.77 ║
╠════════════╬═════════╬══════╬══════════╣
║ 2009-01-15 ║ 10.5 ║ 17.0 ║ 13.93 ║
╚════════════╩═════════╩══════╩══════════╝
第三个包含 ERA 结果的数量:
╔════════════╦═════════════════╗
║ DATE ║ NUMBER OF CASES ║
╠════════════╬═════════════════╣
║ 2009-05-01 ║ 63.0 ║
╠════════════╬═════════════════╣
║ 2009-05-02 ║ 38.0 ║
╠════════════╬═════════════════╣
║ 2009-05-03 ║ 33.0 ║
╠════════════╬═════════════════╣
║ 2009-05-04 ║ 161.0 ║
╠════════════╬═════════════════╣
║ 2009-05-05 ║ 192.0 ║
╠════════════╬═════════════════╣
║ 2009-05-06 ║ 164.0 ║
╠════════════╬═════════════════╣
║ 2009-05-07 ║ 149.0 ║
╠════════════╬═════════════════╣
║ 2009-05-08 ║ 159.0 ║
╠════════════╬═════════════════╣
║ 2009-05-09 ║ 42.0 ║
╠════════════╬═════════════════╣
║ 2009-05-10 ║ 44.0 ║
╠════════════╬═════════════════╣
║ 2009-05-11 ║ 154.0 ║
╠════════════╬═════════════════╣
║ 2009-05-12 ║ 143.0 ║
╠════════════╬═════════════════╣
║ 2009-05-13 ║ 165.0 ║
╠════════════╬═════════════════╣
║ 2009-05-14 ║ 166.0 ║
╠════════════╬═════════════════╣
║ 2009-05-15 ║ 153.0 ║
╚════════════╩═════════════════╝
我正在尝试做的是合并三个数据帧并生成一个数据帧,其中包含按同一日期索引的所有数据。
我使用的代码如下:
import pandas.io.sql as psql
import pandas as pd
connection_first_second_dataf = pg.connect("dbname=db_1 user=postgres")
connection_third_dataf = pg.connect("dbname=db_2 user=postgres")
first_dataframe = psql.read_sql("SELECT * FROM "VIEW_1"", connection_first_second_dataf)
second_dataframe = psql.read_sql("SELECT * FROM "VIEW_2"", connection_first_second_dataf)
thir_dataframe = psql.read_sql("SELECT * FROM "VIEW_3"", connection_third_dataf)
dataframe_result = pd.merge(first_dataframe,
second_dataframe,
on='DATE')
dataframe_result = pd.merge(dataframe_result,
thir_dataframe,
on='DATE')
最终结果如下:
╔════════════╦═══════════════╦═══════╦════════╦═════╦═════╦═════════╦══════╦══════╦═══════╦═════════════════╗
║ DATE ║ PRECIPITATION ║ PM 10 ║ PM 2.5 ║ NO2 ║ SO2 ║ CO ║ min ║ max ║ avg ║ NUMBER OF CASES ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-01 ║ 4.0 ║ 79.2 ║ 31.2 ║ NaN ║ 6.7 ║ 0.5 ║ 10.4 ║ 17.2 ║ 14.34 ║ 63.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-02 ║ 0.0 ║ 82.2 ║ 28.9 ║ NaN ║ 7.3 ║ 0.4 ║ 12.5 ║ 17.4 ║ 14.76 ║ 38.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-03 ║ 0.2 ║ 77.1 ║ 23.0 ║ NaN ║ 4.1 ║ 0.4 ║ 11.9 ║ 16.4 ║ 14.05 ║ 33.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-04 ║ 0.6 ║ 53.8 ║ 13.7 ║ NaN ║ 2.3 ║ -9999.0 ║ 11.4 ║ 15.9 ║ 13.35 ║ 161.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-05 ║ 0.7 ║ 50.4 ║ 17.0 ║ NaN ║ 2.5 ║ -9999.0 ║ 12.5 ║ 18.6 ║ 14.89 ║ 192.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-06 ║ 0.0 ║ 76.1 ║ 23.8 ║ NaN ║ 5.1 ║ -9999.0 ║ 11.8 ║ 17.4 ║ 14.43 ║ 164.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-07 ║ 0.3 ║ 97.7 ║ 34.0 ║ NaN ║ 9.6 ║ -9999.0 ║ 13.2 ║ 20.6 ║ 15.82 ║ 149.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-08 ║ 0.2 ║ 69.6 ║ 20.3 ║ NaN ║ 5.5 ║ -9999.0 ║ 11.6 ║ 20.4 ║ 15.49 ║ 159.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-09 ║ 0.0 ║ 87.4 ║ 26.3 ║ NaN ║ 5.2 ║ -9999.0 ║ 12.9 ║ 19.4 ║ 15.69 ║ 42.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-10 ║ 0.0 ║ 74.6 ║ 19.9 ║ NaN ║ 3.6 ║ 0.3 ║ 12.8 ║ 19.0 ║ 15.52 ║ 44.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-11 ║ 0.6 ║ 57.6 ║ 17.1 ║ NaN ║ 3.6 ║ -9999.0 ║ 12.5 ║ 20.2 ║ 15.48 ║ 154.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-12 ║ 0.0 ║ 63.7 ║ 19.5 ║ NaN ║ 4.7 ║ -9999.0 ║ 9.9 ║ 20.0 ║ 14.97 ║ 143.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-13 ║ 0.0 ║ 95.4 ║ 27.6 ║ NaN ║ 6.4 ║ -9999.0 ║ 12.6 ║ 20.8 ║ 15.45 ║ 165.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-14 ║ 0.0 ║ 101.7 ║ 29.1 ║ NaN ║ 5.0 ║ 0.5 ║ 11.7 ║ 19.6 ║ 14.94 ║ 166.0 ║
╠════════════╬═══════════════╬═══════╬════════╬═════╬═════╬═════════╬══════╬══════╬═══════╬═════════════════╣
║ 2009-05-15 ║ 0.0 ║ 112.5 ║ 40.1 ║ NaN ║ 8.0 ║ 0.9 ║ 11.7 ║ 19.1 ║ 14.81 ║ 153.0 ║
╚════════════╩═══════════════╩═══════╩════════╩═════╩═════╩═════════╩══════╩══════╩═══════╩═════════════════╝
如我们所见,第一个和第二个数据帧从 2009-01-01 开始,第三个数据帧从 2009-05-01 开始,当我尝试将三个数据帧合并为一个数据帧时,最后一个数据帧从 2009-05-01 开始。
我的问题是,如何强制到最终数据帧以 2009-01-01 的值开头?(无论"病例数"列是否具有从 2009-01-01 到 2009-04-31 的 NaN 值,我知道我没有这些日期的任何数据)。
我已经阅读了熊猫的文档,但是我没有找到任何我需要的解决方案,也对不起我的英语,
谢谢。
怎么样:
result = first_dataframe
.merge(second_dataframe, on='DATE', how='outer')
.merge(thir_dataframe, on='DATE', how='outer')
较短的代码,关键字是"outer"。