【发布时间】:2018-07-29 17:12:59
【问题描述】:
我有两个从我想要加入的 csv 文件中读取的 Pandas 数据帧。两者都有一个我设置为索引的 ID 列。然后我只是根据索引加入它们。 不幸的是,当我这样做并且第二个 df 的索引与第一个 df 的顺序不同时,它会失败。 例如:
>>> 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)?我当然也尝试过基于列合并(所以没有将它们设置为索引),但它也不起作用。
【问题讨论】:
-
检查这个答案,
https://stackoverflow.com/questions/30045086/pandas-left-join-and-update-existing-column -
问题出在其中一个文件中。由于 ID 是一个字符串/对象,它们必须完美匹配,但是在“ID”列的每个值的末尾都有一个空格,因此索引实际上是不同的。一个简单的
df1.join(df2)有效。我想我应该删除这个问题,因为它有点“错误”。
标签: python pandas dataframe join merge