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