Python:为什么我收到传递的“后缀”,导致不允许出现重复列错误?

问题描述 投票:0回答:1

我是 Python 新手,正在完成教科书上的作业:医疗保健分析变得简单:使用机器学习和 Python 进行医疗保健计算的技术。在新窗口中打开 Packt 出版有限公司。 第 6 章:衡量医疗保健质量。卡在第 154 页。 我收到一条错误消息“

MergeError: Passing 'suffixes' which cause duplicate columns {'State_x', 'City_x', 'Hospital Name_x', 'County Name_x', 'Address_x'} is not allowed.

代码:

    import pandas as pd 
    pathname = (
    r"C:\Users\rebec\OneDrive\Desktop\hos_revised_flatfiles_archive
    _10_2018\\"
    )
    files_of_interest = [
        'hvbp_tps_11_07_2017.csv',
        'hvbp_clinical_care_11_07_2017.csv',
        'hvbp_safety_11_07_2017.csv',
        'hvbp_efficiency_11_07_2017.csv',
        'hvbp_hcahps_11_07_2017.csv'
    ]
    dfs = {
        foi: pd.read_csv(pathname + foi, header = 0) for foi in 
    files_of_interest 

    for k, v in dfs.items():
        print(
            k + ' - Number of rows: ' + str(v.shape[0]) +
            ', Number of columns: ' + str(v.shape[1])
        )

    for v in dfs.values ():
        for column in v.columns:
            print(column)
            print('\n')

    df_master =dfs[files_of_interest[0]].merge(
        dfs[files_of_interest[1]],
        on='Provider Number',
        how='left',
        copy=False
    )
    print(df_master.shape)

    print(df_master.columns)

    for df in dfs.values():
         df.columns  = [col if col not in ['Provider_Number'] else 'Provider    
    Number'
                       for col in df.columns]
        for num in [2,3,4]:
            df_master = df_master.merge(
                dfs[files_of_interest[num]],
                on='Provider Number',
                how='left',
                copy=False)
            print(df_master.shape)
Error received:
    "MergeError: Passing 'suffixes' which cause duplicate columns    
    {'State_x', 'City_x', 'Hospital Name_x', 'County Name_x', 'Address_x'}
    is not allowed."

我直接按照书中的说明进行操作,并没有预料到会出现错误。直到最后一段代码,我得到了与书上相同的结果。一般来说,我对编码很陌生,不确定从哪里开始尝试解决。 我也会给教授发电子邮件,但我想在这里发帖也没什么坏处。

python pandas merge
1个回答
0
投票

当您

merge
时,不用作合并键但存在于
merge
两侧的列将被分配一个后缀以消除歧义:

df1 = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': [1, 2, 3]})
df2 = pd.DataFrame({'A': ['a', 'b'], 'B': [1, 2]})

df1.merge(df2, on='A')

   A  B_x  B_y
0  a    1    1
1  b    2    2
2  a    3    1

在您的情况下,您可能已经执行了连续合并,并且要创建的一列已经存在:

df1 = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': [1, 2, 3]})
df2 = pd.DataFrame({'A': ['a', 'b'], 'B': [1, 2], 'B_y': [3, 4]})

df1.merge(df2, on='A')
# MergeError: Passing 'suffixes' which cause duplicate columns {'B_y'} is not allowed.

如果无法更改合并逻辑,解决方法是使用不同的后缀:

df1.merge(df2, on='A', suffixes=('_x1', '_x2'))

   A  B_x1  B_x2  B_y
0  a     1     1    3
1  b     2     2    4
2  a     3     1    3
© www.soinside.com 2019 - 2024. All rights reserved.