我正在使用合并两个数据帧pandas.merge.即使在指定how = left选项后,我发现合并数据帧的行数大于原始行.为什么会这样?
panel = pd.read_csv(file1, encoding ='cp932')
before_len = len(panel)
prof_2000 = pd.read_csv(file2, encoding ='cp932').drop_duplicates()
temp_2000 = pd.merge(panel, prof_2000, left_on='Candidate_u', right_on="name2", how="left")
after_len = len(temp_2000)
print(before_len, after_len)
> 12661 13915
Run Code Online (Sandbox Code Playgroud)
Tha*_*nos 16
这听起来像有一个以上的行right下'name2'匹配您已经设置了该密钥left.使用选项'how='left'与pandas.DataFrame.merge()仅仅意味着:
- left:仅使用左框架中的按键
但是,结果对象中的实际行数不一定与left对象中的行数相同.
例:
In [359]: df_1
Out[359]:
A B
0 a AAA
1 b BBA
2 c CCF
Run Code Online (Sandbox Code Playgroud)
然后是另一个看起来像这样的DF(注意左边所需的键有多个条目):
In [360]: df_3
Out[360]:
key value
0 a 1
1 a 2
2 b 3
3 a 4
Run Code Online (Sandbox Code Playgroud)
如果我合并这两个left.A,这是发生的事情:
In [361]: df_1.merge(df_3, how='left', left_on='A', right_on='key')
Out[361]:
A B key value
0 a AAA a 1.0
1 a AAA a 2.0
2 a AAA a 4.0
3 b BBA b 3.0
4 c CCF NaN NaN
Run Code Online (Sandbox Code Playgroud)
这甚至发生了,虽然我与合并how='left',你可以在上面看到,有简单的一个以上的行合并,如下图所示的结果pd.DataFrame实际上已经比更多的行pd.DataFrame上left.
我希望这有帮助!
每个(任何类型,“两者”或“左”)之后的行加倍的问题merge()通常是由任何键中的重复项引起的,因此我们需要首先删除它们:
left_df.drop_duplicates(subset=left_key, inplace=True)
right_df.drop_duplicates(subset=right_key, inplace=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8435 次 |
| 最近记录: |