Skip to main content
 首页 » 编程设计

python之合并具有相同标题的列没有重复的列

2025年05月04日24xiaohuochai

因此,我尝试查看许多文章,解释合并或连接、连接等如何在 python 中为 pandas 或只是一般的 r 工作。当我用我的数据测试它时,似乎没有什么能按我需要的方式工作。我将发布带有任意数字和 header 的示例数据,这些数据具有我的数据的特征以及我希望它在最终产品中的外观。我通常尝试使用 Genus 作为我的常用列,因为该列具有最常用的信息,而所有其他列都是描述该列的信息。这些是文本文件。

数据框 1:

Genus    Data    Facts    Info 
Dog    1    2    N/A 
Cat    3    1    N/A 
Elephant    N/A    3    3 
Pig    N/A    N/A    N/A 
Mouse    N/A    N/A    N/A 

数据框 2:

Genus    Info    Stats 
Dog    2    3 
Cat    1    2 
Elephant    N/A    1 
Pig    N/A    N/A 
Mouse    N/A    N/A 
Bird    N/A    N/A 

期望的结果:

Genus    Data    Facts    Info    Stats 
Dog    1    2    2    3 
Cat    3    1    1    2 
Elephant    N/A    3    3    1 
Pig    N/A    N/A    N/A    N/A 
Mouse    N/A    N/A    N/A    N/A 
Bird    N/A    N/A    N/A    N/A 

有没有办法使用 python 或 r 来创建此结果?我是 python 和 r 的新手,不知道/all/的来龙去脉,所以我可能只是遗漏了一些东西或者没有使用正确的术语进行搜索,但我已经尝试了大约 3 周,现在正在阅读其他人对类似情况做了什么,并试图摆脱这些情况。我不能使用 Excel,因为它会自动将一些数字输入更改为日期并进行其他小的更改,如果有人试图重做,他们可能没有意识到修复这些细微差别。

请您参考如下方法:

以下是如何在 python 中使用 pandas 执行此操作:

import pandas as pd 
import numpy as np 
 
df1 = pd.DataFrame(np.random.randn(3,4), columns=['a','b','c','d'] 
df2 = pd.DataFrame(np.random.randn(3,2), columns=['e','f']) 
 
pd.concat([df1, df2], axis=1) 
#          a         b         c         d         e         f 
# 0 -1.181554  0.918146  0.547498 -0.409452 -1.852066 -0.377525 
# 1  0.508757  0.219863  1.945935  1.285512 -0.076156  0.172197 
# 2 -0.186153 -1.784728 -0.200416  1.873692  2.097818  0.575256 

(McKinney,用于数据分析的 Python,第 186 页)

编辑:

糟糕,我注意到您在两个数据框中都有一个信息列。我认为在那种情况下这会更好:

df1.combine_first(df2) 

you can think of it as "patching" missing data in the calling object with data from the object you pass (McKinney)

编辑:

McKinney 的另一引述,p177 提供

pandas.merge connects rows of DataFrames based on one or more keys [like a database join]

pandas.concat glues or stacks together objects along an axis

combine_first enables splicing together overlapping data to fill in missing values in one object with values from another