合并两个数据帧

2024-06-28 19:11:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读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

所以这两个df都有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

Tags: keycoreinfodataframepandasdataextraframe
1条回答
网友
1楼 · 发布于 2024-06-28 19:11:53

所发生的是在一个或两个数据帧中有重复的值key。因此,如果data在其中有key15次,而extra在其中有key12次,那么在合并键列上的两个数据帧时,key1将有10个条目。你知道吗

解决办法是:

# delete the common column in one of the data frames
del extra['key']

# join
result = data.join(extra) 

相关问题 更多 >