附加两个具有相同列、不同顺序的数据框
Posted
技术标签:
【中文标题】附加两个具有相同列、不同顺序的数据框【英文标题】:Appending two dataframes with same columns, different order 【发布时间】:2014-02-21 11:56:45 【问题描述】:我有两个 pandas 数据框。
noclickDF = DataFrame([[0, 123, 321], [0, 1543, 432]],
columns=['click', 'id', 'location'])
clickDF = DataFrame([[1, 123, 421], [1, 1543, 436]],
columns=['click', 'location','id'])
我只是想加入这样最终的 DF 看起来像:
click | id | location
0 123 321
0 1543 432
1 421 123
1 436 1543
如您所见,两个原始 DF 的列名相同,但顺序不同。列中也没有连接。
【问题讨论】:
【参考方案1】:你也可以使用pd.concat:
In [36]: pd.concat([noclickDF, clickDF], ignore_index=True)
Out[36]:
click id location
0 0 123 321
1 0 1543 432
2 1 421 123
3 1 436 1543
在后台,DataFrame.append
调用 pd.concat
。
DataFrame.append
具有处理各种类型输入的代码,例如系列、元组、列表和字典。如果你给它传递一个DataFrame,它会直接传递给pd.concat
,所以使用pd.concat
会更直接一些。
【讨论】:
很好的描述性答案。投票并建议添加ignore_index
。【参考方案2】:
对于未来的用户(有时>pandas 0.23.0):
您可能还需要添加 sort=True 以在非串联轴尚未对齐时对其进行排序(即保留 OP 所需的串联行为)。我使用上面提供的代码并收到警告,请参阅Python Pandas User Warning。下面的代码有效,不会引发警告。
In [36]: pd.concat([noclickDF, clickDF], ignore_index=True, sort=True)
Out[36]:
click id location
0 0 123 321
1 0 1543 432
2 1 421 123
3 1 436 1543
【讨论】:
【参考方案3】:您可以为此使用附加
df = noclickDF.append(clickDF)
print df
click id location
0 0 123 321
1 0 1543 432
0 1 421 123
1 1 436 1543
如果需要,您可以通过
重置索引df.reset_index(drop=True)
print df
click id location
0 0 123 321
1 0 1543 432
2 1 421 123
3 1 436 1543
【讨论】:
以上是关于附加两个具有相同列、不同顺序的数据框的主要内容,如果未能解决你的问题,请参考以下文章
【R】行或列数目不同的两个数据框如何用rbind/cbind合并?
使用 pandas 连接两个数据框中的不同列(并附加相似的列)