Python 即使在“pandas.merge”和“left”选项之后,行数也会更改

Python 即使在“pandas.merge”和“left”选项之后,行数也会更改,python,pandas,Python,Pandas,我正在使用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

我正在使用
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

这听起来像是在
'name2'
下的
右侧
中有多行与您为
左侧
设置的键匹配。使用选项
'how='left'
仅表示:

  • 左:仅使用左帧中的关键点
但是,结果对象中的实际行数不一定与
对象中的行数相同

例如:

In [359]: df_1
Out[359]: 
   A    B
0  a  AAA
1  b  BBA
2  c  CCF
然后是另一个类似于此的DF(注意,左侧有多个用于所需键的条目):

如果我将这两个合并到
左侧.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
即使我与
how='left'
合并,也会发生这种情况,正如您在上面所看到的,要合并的行不止一行,如图所示,结果
pd.DataFrame
实际上比
left
上的
pd.DataFrame
有更多的行


我希望这有帮助

每次
merge()
(任何类型的'both'或'left')后行加倍的问题通常是由任何键中的重复项引起的,因此我们需要先删除它们:

left_df.drop_duplicates(subset=left_key, inplace=True)
right_df.drop_duplicates(subset=right_key, inplace=True)

你的答案很完美!谢谢在我的例子中,
.drop_duplicates(subset=“name2”)
会删除重复的行,这对于我来说是很好的!很高兴这有帮助,祝你好运!
left_df.drop_duplicates(subset=left_key, inplace=True)
right_df.drop_duplicates(subset=right_key, inplace=True)