0
我試圖合併3個dataframes有一個共同的日期欄丟失任何行(用作索引)Python的大熊貓:合併三個DataFrames有一個共同的日期列,而不對最終結果
第一個數據幀中包含空氣pollutans和沉澱的一些值:
╔════════════╦═══════════════╦═════════╦═════════╦═════╦═════════╦═════╗
║ 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 ║
╚════════════╩═════════════════╝
我試圖做的是要合併三個dataframes並生成一個與索引的所有數據在同一天。使用
我的代碼如下:
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值,我知道我沒有這些日期的任何數據)。
我看過大熊貓的資料,但我沒有找到我所需要的任何解決方案,對不起我的英語水平,
謝謝。
在你的合併中傳遞參數how ='outer'。默認是內部 – Vaishali
它的作品就像一個魅力,謝謝 –
很高興它的工作,你幾乎在你自己的所以沒有發佈回答:) – Vaishali