Skip to main content
 首页 » 编程设计

python之Pandas left join 给出 NaN

2025年05月04日22飞鱼

DataFrameA

                                 RunId  isClean  isFinished 
0                 APAC_P1_HSFR_REGTEST      0.0         1.0 
0                      APAC_P1_REGTEST      1.0         1.0 
0                APAC_P2a_HSFR_REGTEST      0.0         0.0 
0                     APAC_P2a_REGTEST      0.0         1.0 
0                APAC_P2b_HSFR_REGTEST      0.0         0.0 
0                     APAC_P2b_REGTEST      1.0         1.0 
0                APAC_P2c_HSFR_REGTEST      0.0         0.0 
0                     APAC_P2c_REGTEST      0.0         1.0 
0                APAC_P3a_HSFR_REGTEST      0.0         0.0 
0                     APAC_P3a_REGTEST      0.0         0.0 
0                APAC_P3b_HSFR_REGTEST      0.0         0.0 
0                     APAC_P3b_REGTEST      0.0         0.0 
0                      Cliquet_REGTEST      0.0         1.0 

DataFrameB

                             RunId  Status 
0            APAC_P2a_HSFR_REGTEST   Error 
2            APAC_P2b_HSFR_REGTEST   Error 
4            APAC_P2c_HSFR_REGTEST   Error 
6            APAC_P3a_HSFR_REGTEST   Error 
8            APAC_P3b_HSFR_REGTEST   Error 
10             CS_P10_HSFR_REGTEST   Error 
12             CS_P11_HSFR_REGTEST   Error 
14              CS_P1_HSFR_REGTEST   Error 
16              CS_P2_HSFR_REGTEST   Error 
18              CS_P3_HSFR_REGTEST   Error 
20              CS_P4_HSFR_REGTEST   Error 
22              CS_P5_HSFR_REGTEST   Error 
24              CS_P6_HSFR_REGTEST   Error 

DataFrameA.join(DataFrameB,on='RunId',how='left',rsuffix='_y')

                                 RunId  isClean  isFinished RunId_y Status 
0                 APAC_P1_HSFR_REGTEST      0.0         1.0     NaN    NaN 
0                      APAC_P1_REGTEST      1.0         1.0     NaN    NaN 
0                APAC_P2a_HSFR_REGTEST      0.0         0.0     NaN    NaN 
0                     APAC_P2a_REGTEST      0.0         1.0     NaN    NaN 
0                APAC_P2b_HSFR_REGTEST      0.0         0.0     NaN    NaN 
0                     APAC_P2b_REGTEST      1.0         1.0     NaN    NaN 
0                APAC_P2c_HSFR_REGTEST      0.0         0.0     NaN    NaN 
0                     APAC_P2c_REGTEST      0.0         1.0     NaN    NaN 
0                APAC_P3a_HSFR_REGTEST      0.0         0.0     NaN    NaN 
0                     APAC_P3a_REGTEST      0.0         0.0     NaN    NaN 
0                APAC_P3b_HSFR_REGTEST      0.0         0.0     NaN    NaN 
0                     APAC_P3b_REGTEST      0.0         0.0     NaN    NaN 
0                      Cliquet_REGTEST      0.0         1.0     NaN    NaN 

一个问题,为什么所有 NaN ?存在非 NaN 交集,例如 APAC_P2a_HSFR_REGTEST。对不起,如果这是一个愚蠢的问题,但谷歌搜索没有帮助。

请您参考如下方法:

问题是 join使用 index,因此需要通过 RunId 列创建索引:

df = DataFrameA.join(DataFrameB.set_index('RunId'),on='RunId',how='left',rsuffix='_y') 

或者使用merge :

df = DataFrameA.merge(DataFrameB,on='RunId',how='left') 
 
print (df) 
                    RunId  isClean  isFinished Status 
0    APAC_P1_HSFR_REGTEST      0.0         1.0    NaN 
1         APAC_P1_REGTEST      1.0         1.0    NaN 
2   APAC_P2a_HSFR_REGTEST      0.0         0.0  Error 
3        APAC_P2a_REGTEST      0.0         1.0    NaN 
4   APAC_P2b_HSFR_REGTEST      0.0         0.0  Error 
5        APAC_P2b_REGTEST      1.0         1.0    NaN 
6   APAC_P2c_HSFR_REGTEST      0.0         0.0  Error 
7        APAC_P2c_REGTEST      0.0         1.0    NaN 
8   APAC_P3a_HSFR_REGTEST      0.0         0.0  Error 
9        APAC_P3a_REGTEST      0.0         0.0    NaN 
10  APAC_P3b_HSFR_REGTEST      0.0         0.0  Error 
11       APAC_P3b_REGTEST      0.0         0.0    NaN 
12        Cliquet_REGTEST      0.0         1.0    NaN