【发布时间】: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,result 有 11926 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
【问题讨论】: