【发布时间】:2020-04-10 06:35:57
【问题描述】:
我正在尝试使用 pandas 合并两个或多个数据框:
DF1:
Name E-mail Phone Number
Trent trent@example.com 12341234
Barry barry@example.com 12345678
Jared jared@example.com 56781234
DF2:
Name E-mail Age
Trent trent@example.com 24
Barry barry@example.com 18
Jared jared@example.com 31
代码:
df1 = pd.read_excel("Book1.xlsx")
df2 = pd.read_excel("Book2.xlsx")
files = [df1,df2]
df_all = reduce(lambda left,right: pd.merge(left, right, on='Name'), files)
df_all = df_all.drop_duplicates(subset='Name', keep='first')
df_all = df_all.fillna(0)
现在的输出是:
Name E-mail_x Age E-mail_y Phone Number
Trent trent@example.com 24 trent@example.com 12341234
Barry barry@example.com 18 barry@example.com 12345678
Jared jared@example.com 31 jared@example.com 56781234
无论如何要删除“_x”和“_y”并使其只是一列
预期输出:
Name E-mail Age Phone Number
Trent trent@example.com 24 12341234
Barry barry@example.com 18 12345678
Jared jared@example.com 31 56781234
编辑:列名 [email,age,phone number] 不是恒定的,它们可以更改,因此列名在大多数情况下是未知的
【问题讨论】:
-
merge(left, right, on=['Name', 'E-mail'],...? -
列名并不总是已知的,它们可以从不同的数据帧中改变
-
如果是这种情况,那么您需要更好地解释您想使用什么逻辑来处理此类重复。您可以考虑将所有重复列视为键
df1.merge(df2)的合并,或者您可以仅信任一个 DataFrame 中的列(例如左侧)并仅合并名称,从右侧框架中删除所有其他重叠列。但这两者的结果可能大不相同。 -
纯
pd.merge(df1, df2)有什么问题?
标签: python excel pandas join merge