Python在不复制列的情况下合并数据帧
我正在尝试使用pandas合并两个或多个数据帧: DF1: DF2: 代码:Python在不复制列的情况下合并数据帧,python,excel,pandas,join,merge,Python,Excel,Pandas,Join,Merge,我正在尝试使用pandas合并两个或多个数据帧: DF1: DF2: 代码: 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', k
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
编辑:列名[电子邮件、年龄、电话号码]不是固定不变的,它们可能会更改,因此列名在大多数情况下是未知的仅供参考,您不需要reduce功能,只需使用:
df_all = df1.merge(df2)
它正在复制列,因为您正在“名称”上合并。如果所有列都相同,可以删除on='Name'参数,它将合并所有公共列,而不是复制它们
或者,您可以仅合并df2中的非重复列:
df_all = df1.merge(df2[['Name','Age']])
您也可以使用函数
join
:
COMMON_COLUMNS=[“name”,“email”]
df3=df1.join(df2.set\u索引(公共列),on=COMMON\u列)
df3=df3.drop_重复项(子集=公共_列,keep='first')
您可以在加入之前或之后删除重复项。
merge(左、右、开=['Name','E-mail']列名不总是已知的,它们可以从不同的DATAFAMESE改变,如果是这样的话,那么您需要更好地解释您想用什么逻辑来处理这样的重复。您可以考虑将所有重复列作为键<代码> DF1.合并(DF2)的合并。
或者您可以只信任一个数据帧中的列(比如左边的一个),然后只使用名称进行合并,从右边的帧中删除所有其他重叠的列。但是这两个数据帧的结果可能会有很大的不同。纯pd.merge(df1,df2)有什么问题吗?
?
df_all = df1.merge(df2)
df_all = df1.merge(df2[['Name','Age']])