gpt4 book ai didi

python - Pandas 在连接字符串时合并结果丢失的行

转载 作者:行者123 更新时间:2023-11-30 22:15:34 26 4
gpt4 key购买 nike

我有一个一直在清理的数据集,为了清理它,我需要将其放入数据透视表中以总结一些数据。我现在将其放回数据帧中,以便可以将其与其他一些数据帧合并。 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 代码的列表,并在它与我指定的每个区域匹配的地方执行合并?就像一对多匹配一样?

谢谢。

最佳答案

当合并未按预期工作时,要做的第一件事就是查看有问题的列。

在大多数情况下,最大的罪魁祸首是尾随/前导空格。这些通常是在从文件中错误读取 DataFrame 时引入的。

尝试通过剥离多余的空白字符来消除它们。假设您需要加入“Region”列,请使用

for df in (df1, df2):
# Strip the column(s) you're planning to join with
df['Region'] = df['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' 进行比较。

这一次,修复方法是使用 str.replace:

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

关于python - Pandas 在连接字符串时合并结果丢失的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50259791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com