【发布时间】:2015-05-04 17:54:41
【问题描述】:
有没有一种很好的方法来连接 DataFrames 列表,其中 DataFrames 之间的列不规则?
期望的结果是匹配所有匹配的列,但将不匹配的列放在一边。您希望保留不匹配列的原因是,虽然列表中的第一个和第二个数据帧之间的给定列可能不匹配,但第一个和第三个数据帧之间可能存在匹配。因此,在第一次缺少匹配时过早丢弃是不理想的。
例如:
print list(datalist[0].columns)
>>>[u'1', u'2', u'3']
print list(datalist[1].columns)
>>>[u'1', u'2', u'4']
print list(datalist[2].columns)
>>>[u'2', u'3', u'4']
输出将是一个类似的数据框(此处以风格表示):
1 2 3 -
1 2 - 4
- 2 3 4
【问题讨论】:
-
你能分享你的预期结果吗?是否希望将列附加到相同位置而不管它们的标签,还是希望表格随着新标签的添加而变宽?
-
@JAB 抱歉回复晚了。出城。随着新标签的添加,我想扩大范围。我很惊讶 pandas 没有内置的功能来执行此操作,甚至 SO 上的某个人也找到了解决方法。似乎附加列名略有不同的数据框应该不是不可能的事情..
-
我不明白“列名略有不同的部分”。如果你 concat 垂直匹配的列将重叠,新列将扩大表格。
-
啊,是的。你是非常正确的JAB。我的印象是,在 concat 函数上使用 join="outer" 参数只会垂直向上和向下附加所有内容,而不考虑列名。似乎情况并非如此。当我最初测试它时,我一定很困惑。我将相应地编辑我的问题。
-
我认为这可能会帮助其他解决这个问题的人。我认为如果您添加一个自我回答并接受,而不是在编辑中标记已解决的问题,这将很有用。 Self answers are encouraged
标签: python pandas merge concatenation