【发布时间】:2016-08-25 18:41:42
【问题描述】:
我有两个 CSV 文件,具有以下架构:
CSV1 列:
"Id","First","Last","Email","Company"
CSV2 列:
"PersonId","FirstName","LastName","Em","FavoriteFood"
如果我将它们分别加载到 Pandas DataFrame 中并执行newdf = df1.merge(df2, how='outer', left_on=['Last', 'First'], right_on=['LastName','FirstName'])
然后,连接的 DataFrame 的 CSV 导出具有以下架构:
"Id","First","Last","Email","Company","PersonId","FirstName","LastName","Em","FavoriteFood"
- 仅在 CSV1 中的所有行都有一个名字印在下面 “第一。”
- 仅在 CSV2 中的所有行都有一个名字印在下面 “名字。”
- 两个 CSV 文件中的所有行都有第一个 name (完全相同的值 - 这是意料之中的,因为它是 “加入”值) 打印在两列下。
- “Last”和“LastName”的问题相同。
我想要的是一个更像这样的输出模式:
"Id","First","Last","Email","Company","PersonId","Em","FavoriteFood"
- 它应该包含“First”列下的所有“名字”(以及“Last”的等价物)。
我熟悉的大多数关系数据库软件都这样做(左侧连接列名称赢得了命名之战)。 Pandas 是否有语法指示它这样做?
df1.merge(df2.rename(columns = {'LastName':'Last', 'FirstName':'First'}), how='outer', on=['Last', 'First']) 可以,但从风格上讲,在我的源代码中两次硬编码相同的列名会让我发疯。如果我更改 CSV 文件中的列名,则需要修复更多。
【问题讨论】: