将多个 DataFrame 与非标准列连接起来

Posted

技术标签:

【中文标题】将多个 DataFrame 与非标准列连接起来【英文标题】:Concatenating Multiple DataFrames with Non-Standard Columns 【发布时间】: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 【参考方案1】:
data=pd.concat(datalist,join='outer', axis=0, ignore_index=True)

这行得通。我最初的印象是,应用了 join="outer" 参数的 concat 只会直接向上和向下追加,而不考虑列名。实际上,当应用 join="outer" 参数时,它将组合它可以匹配的列,然后将所有不匹配的列保持在 DF 的一侧,这正是所需要的。希望这对其他人有帮助。

【讨论】:

以上是关于将多个 DataFrame 与非标准列连接起来的主要内容,如果未能解决你的问题,请参考以下文章

如何将一个 DataFrame 中的多个列与另一个 DataFrame 连接

如何在 Spark 中将两个 DataFrame 与组合列连接起来?

将多个(任意数量)火花 DataFrame 列连接成一个“|”分隔字符串

pandas将dataframe中的多个字符串数据列的内容使用自定义分隔符拼接起来并生成新的数据列(combinine multiple string columns of dataframe)

通过加入多个 DataFrame 来连接列

连接后如何在 Pyspark Dataframe 中选择和排序多个列