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)