Python pandas在无序索引失败时加入数据帧

时间:2018-02-19 12:51:57

标签: python pandas dataframe join merge

我有两个从我要加入的csv文件中读取的Pandas数据帧。两者都有一个我设置为索引的ID列。然后我根据索引加入它们。 不幸的是,当我这样做并且第二个df的索引不遵循第一个df的相同顺序时它失败了。 E.g:

>>> print df1
                A     B
ID                                                                         
004583404.1_1   CYT   NaN
005874764.1_2   CYT   NaN
004583406.1_3   TMH   NaN
005873538.1_36  SpII  cleavage=18-19
005873971.1_57  SpII  cleavage=18-19

>>> print df2
                LipoBoxSimilarity OM/IM  Cleavage site
Sequence name                                        
005873971.1_57              High    OM             19
005873538.1_36              High    OM             19

>>> print df1.join(df2)
                A     B     LipoBoxSimilarity OM/IM  Cleavage site
ID                                                                         
004583404.1_1   CYT   NaN                 NaN   NaN            NaN
005874764.1_2   CYT   NaN                 NaN   NaN            NaN
004583406.1_3   TMH   NaN                 NaN   NaN            NaN
005873538.1_36  SpII  cleavage=18-19     High    OM             19
005873971.1_57  SpII  cleavage=18-19     High    OM             19

当我合并这两个df时,它仍然有效。然后,当我使用实际文件作为输入(只有更多行)时,它不再起作用。 两个df分别正确构建并且索引适当,列也合并,但不合并。所以我最终会遇到这种情况:

>>> print df1.join(df2)
                A     B     LipoBoxSimilarity OM/IM  Cleavage site
ID                                                                         
004583404.1_1   CYT   NaN                 NaN   NaN            NaN
005874764.1_2   CYT   NaN                 NaN   NaN            NaN
004583406.1_3   TMH   NaN                 NaN   NaN            NaN
005873538.1_36  SpII  cleavage=18-19      NaN   NaN            NaN
005873971.1_57  SpII  cleavage=18-19      NaN   NaN            NaN

原因可能是什么?我在与索引顺序相关的文档中找不到任何问题。可能是一个字母数字索引问题(例如WP_004583404.1_1)?我当然也试过基于列合并(所以没有将它们设置为索引),但它也不起作用。

1 个答案:

答案 0 :(得分:0)

试试combine_first。注意我已经在2个数据帧之间对齐了公共列名('ID')。

for (let data = [], i=0; i<1000; ++i) {
    // Do something here that populates the data variable.
}
console.log(data); //Uncaught ReferenceError: data is not defined