【问题标题】:merge two dataframes pandas合并两个数据框熊猫
【发布时间】:2016-01-01 09:51:44
【问题描述】:

我正在阅读 2 个 dfs:

extra = pd.read_csv('table1.txt', sep = '\s+')
data = pd.read_csv('table2.dat', sep = '\s+')

extra.info() 的输出是:

class 'pandas.core.frame.DataFrame'>
Int64Index: 11528 entries, 0 to 11527
Data columns:
a     11528  non-null values
key   11528  non-null values
c     11528  non-null values
d     11528  non-null values
e     11528  non-null values
f     11528  non-null values
g     11528  non-null values
h     11528  non-null values
i     11528  non-null values
j     11528  non-null values
k     11528  non-null values
dtypes: float64(11)None

data.info() 的输出为:

class 'pandas.core.frame.DataFrame'>
Int64Index: 11528 entries, 0 to 11527
Data columns:
1      11528  non-null values
2      11528  non-null values
3      11528  non-null values
key    11528  non-null values
5      11528  non-null values
...
79     11528  non-null values
80     11528  non-null values
81     11528  non-null values
dtypes: float64(80), int64(1)None

所以这两个 dfs 都有 11528 rows 并且它们有一个共同的列:key

我使用以下方法合并了这两个 dfs:

result = pd.merge(data, extra, on='key', sort = False)

result.info() 的输出是:

class 'pandas.core.frame.DataFrame'>
Int64Index: 11926 entries, 0 to 11925
Data columns:
1    11926  non-null values
2    11926  non-null values
3    11926  non-null values
key  11926  non-null values
5    11926  non-null values
6    11926  non-null values
...
80   11926  non-null values
81   11926  non-null values
a    11926  non-null values
b    11926  non-null values
...    
j    11926  non-null values
k    11926  non-null values
dtypes: float64(90), int64(1)None

显然有问题,因为新合并的 df,result11926 rows

谁能解释一下发生了什么以及写下来的正确方法是什么?

谢谢!

示例

df1 = 1 key 3 4
    1 8 90 5 11
    2 7 60 2 30
    3 3 70 3 26
    4 7 60 2 10

df2 = 5 6 key 7
    1 3 2 90 17
    2 9 3 60 42
    3 6 4 70 17
    4 1 5 60 23

我想要的输出是:

1 key 3 4 5 6 7 
1 8 90 5 11 3 2 17
2 7 60 2 30 9 3 42
3 3 70 3 26 6 4 17
4 7 60 2 10 1 5 23

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    发生的情况是您在一个或两个数据框中有重复的 key 值。因此,如果data 中包含key1 5 次,extra 中包含key1 2 次,那么当您合并键列上的两个数据框时,您将有 10 个 key1 条目。

    解决办法是:

    # delete the common column in one of the data frames
    del extra['key']
    
    # join
    result = data.join(extra) 
    

    【讨论】:

    • 为了更清楚,key 列在两个 dfs 中是相同的。我正在使用它来合并 2 个 dfs。您所说的是column key 与某个value 有重复项,因此在合并时它们将被输入两次。正确的?我该如何解决?
    • 您必须说明 fixed 对您意味着什么,您是否尝试过将how='left' 传递给merge
    • 查理你是对的,因为当我写 sort = True 时,我可以看到有重复。 @EdChum,我写了一个我想要的输出的小例子。
    • @po6 你没有说明通过how='left' 是否有效
    • @EdChum,不,它没有用。结果 df 仍然有11926 rows
    猜你喜欢
    • 2017-06-11
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    相关资源
    最近更新 更多