Cha*_*esD 2 python string merge dataframe pandas
我有一个我一直在清理的数据集,为了清理它,我需要将它放入数据透视表中以汇总一些数据。我现在将它放回数据帧中,以便我可以将它与其他一些数据帧合并。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
Run Code Online (Sandbox Code Playgroud)
df2 看起来像这样:
Count MKTcode Region
11 RSMR0 REMAINING US SOUTH
12 RWMR0 REMAINING US WEST
13 SFR00 SAN FRANCISCO
Run Code Online (Sandbox Code Playgroud)
我尝试将它们与以下代码合并:
df3 = pd.merge(df1, df2, on='Region', how='inner')
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,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
Run Code Online (Sandbox Code Playgroud)
我尝试过内部和外部连接,但真正的问题似乎是 Pandas 将每个数据框的 Region 列解释为不同的元素。df2 中的 MKTcode 列和 Region 列只有 12 个观察值,并且每个观察值仅出现一次,而 df1 在 Region 列中具有多个重复实例(同一城市的倍数)。有没有一种方法可以让我创建一个我需要的 12 个 MKTcodes 的列表,并在它与我指定的每个区域匹配的地方执行合并?像一对多的比赛?
谢谢。
当合并未按预期工作时,首先要做的是查看有问题的列。
大多数情况下最大的罪魁祸首是尾随/前导空格。这些通常是在从文件中错误读取数据帧时引入的。
尝试通过剥离它们来摆脱额外的空白字符。假设您需要加入“区域”列,请使用
for df in (df1, df2):
# Strip the column(s) you're planning to join with
df['Region'] = df['Region'].str.strip()
Run Code Online (Sandbox Code Playgroud)
现在,合并应该按预期工作,
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
Run Code Online (Sandbox Code Playgroud)
如果您仍然得到 NaN,另一种可能性可能是因为words之间的空白字符不同。例如,'REMAINING US WEST'不会与 比较为相等'REMAINING US WEST'。
这一次,修复方法是使用str.replace:
for df in (df1, df2):
df['Region'] = df['Region'].str.replace(r'\s+', ' ')
Run Code Online (Sandbox Code Playgroud)