【发布时间】:2014-07-22 23:22:24
【问题描述】:
我是 Python 的 stackoverflow 和 pandas 的新手。我在帖子 Looking to merge two Excel files by ID into one Excel file using Python 2.7
中找到了部分答案但是,我还想合并或合并两个同名 excel 文件中的列。我以为下面的帖子会有我的答案,但我猜它的标题不正确:Merging Pandas DataFrames with the same column name
现在我有代码:
import pandas as pd
file1 = pd.read_excel("file1.xlsx")
file2 = pd.read_excel("file2.xlsx")
file3 = file1.merge(file2, on="ID", how="outer")
file3.to_excel("merged.xlsx")
file1.xlsx
ID,JanSales,FebSales,test
1,100,200,汽车
2,200,500,
3,300,400,船
file2.xlsx
ID、信用分数、EMMAScore、测试
2,好,沃森,飞机
3,好的,汤普森,
4,不太好,NA,
我得到的是merged.xlsx
ID、JanSales、FebSales、test_x、CreditScore、EMMAScore、test_y
1,100,200,汽车,NaN,NaN,
2,200,500,,好,沃森,飞机
3,300,400,船,好的,汤普森,
4,NaN,NaN,,不太好,NaN,
我想要的是merged.xlsx
ID、JanSales、FebSales、CreditScore、EMMAScore、测试
1,100,200,NaN,NaN,汽车
2,200,500,好,沃森,飞机
3,300,400,好的,汤普森,船
4,NaN,NaN,不太好,NaN,NaA
在我的真实数据中,有 200 多列对应于我的示例中的“测试”列。我希望程序在 file1.xlsx 和 file2.xlsx 中找到这些具有相同名称的列,并将它们合并到合并文件中。
【问题讨论】:
-
两个 excel 文件中“test”列的值是否相同?两个excel文件的行数和IDS是否相同?如果是前者,那么您可以只删除其中一列并重命名剩余的列,如果是后者,那么您可以在不传递
how='outer'的情况下执行合并,因为这将默认为内部,并将合并在两者中都存在的 id 上跨度> -
@EdChum:“测试”列的值可以是任何值。我只是使用偶数和奇数来简化示例。两个 excel 文件中的行数/ID 数不会相同,实际上它们几乎不会具有相同的 ID。我更新了示例以更准确地反映我的真实数据。
-
合并时它只会在值不匹配时重命名列,这将在您的情况下创建大量 NaN 值,实际值是多少,因为可能有其他方法可以解决这个问题?一种天真的方法是在合并后进行一些后处理,您知道一个文件和另一个文件中的 id 和列,因此您可以使用它通过选择值来创建最终值
-
@EdChum:值可以是任何值,请参阅更新后的帖子。有很多 NaN 值是可以的,实际上这就是我所期望的。我基本上希望代码在两个文件中查找具有相同名称的列,并将它们组合成第三个文件中的一列。正如我在上一段中提到的,真实数据将有 200+ 列,这些列在两个文件中可能具有相同的名称,这使得选择列/值变得乏味。
-
我已经更新了我的答案,这应该适合你的情况