Pandas合并不会按预期合并到常用值

时间:2018-05-09 18:20:23

标签: python pandas dataframe merge

我有一个我一直在清理和清理的数据集我需要把它放到一个数据透视表中来总结一些数据。我现在把它放回到数据帧中,以便我可以将它与其他一些数据帧合并。 df1看起来像这样:

    Count   Region              Period      ACV  PRJ
    167     REMAINING US WEST   3/3/2018    5    57
    168     REMAINING US WEST   3/31/2018   10   83
    169     SAN FRANCISCO       1/13/2018   99   76
    170     SAN FRANCISCO       1/20/2018   34   21

df2看起来像这样:

Count  MKTcode  Region
11     RSMR0    REMAINING US SOUTH
12     RWMR0    REMAINING US WEST
13     SFR00    SAN FRANCISCO

我尝试将它们与此代码合并:

df3 = pd.merge(df1, df2, on='Region', how='inner')

但由于某种原因,pandas没有将Region列解释为相同的数据,并且合并在MKTcode列中调出NaN数据,它似乎将df2附加到df1,如下所示:

Count  Region             Period    ACV             PRJ         MKTcode
193 WASHINGTON, D.C.    3/3/2018    36               38             NaN
194 WASHINGTON, D.C.    3/31/2018   12                3             NaN
195 ATLANTA              NaN        NaN             NaN           ATMR0
196 BOSTON               NaN        NaN             NaN           B2MRN

我尝试过内部和外部联接,但真正的问题似乎是pandas将每个数据帧的Region列解释为不同的元素。 df2中的MKTcode列和Region列只有12个观察值,每个观察值只发生一次,而df1在Region列中有几个重复的实例(同一个城市的倍数)。有没有办法我可以创建我需要的12个MKT代码列表并执行合并,它与我指定的每个区域匹配?喜欢一对多比赛?

感谢。

1 个答案:

答案 0 :(得分:1)

当合并未按预期工作时,首先要做的是查看有问题的列。

在大多数情况下,最大的罪魁祸首是尾随/引导空格,通常是因为DataFrame如何被读入内存而引入。

尝试删除额外的空格字符:

df1['Region'] = df1['Region'].str.strip()
df2['Region'] = df2['Region'].str.strip()

现在,

pd.merge(df1, df2, on='Region', how='inner')

   Count_x             Region     Period  ACV  PRJ  Count_y MKTcode
0      167  REMAINING US WEST   3/3/2018    5   57       12   RWMR0
1      168  REMAINING US WEST  3/31/2018   10   83       12   RWMR0
2      169      SAN FRANCISCO  1/13/2018   99   76       13   SFR00
3      170      SAN FRANCISCO  1/20/2018   34   21       13   SFR00

如果您仍在使用NaN,可能是因为字之间的空白字符存在差异。例如;

'REMAINING  US  WEST' != 'REMAINING US WEST'

在这种情况下,请替换它们:

df1['Region'] = df1['Region'].str.replace(r'\s+', ' ')
df2['Region'] = df2['Region'].str.replace(r'\s+', ' ')