“pandas.merge”与“left”选项后更改的行数

2024-06-08 16:37:09 发布

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

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

Tags: csv数据readlenonmergelefttemp
1条回答
网友
1楼 · 发布于 2024-06-08 16:37:09

这听起来像在'name2'下的right中有多行与您为left设置的键匹配。将选项'how='left'^{}一起使用只意味着:

  • left: use only keys from left frame

但是,result对象中的实际行数不一定与left对象中的行数相同。

示例:

In [359]: df_1
Out[359]: 
   A    B
0  a  AAA
1  b  BBA
2  c  CCF

然后是另一个类似这样的DF(注意,左边有多个用于您所需键的条目):

In [360]: df_3
Out[360]: 
  key  value
0   a      1
1   a      2
2   b      3
3   a      4

如果我在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

即使我与how='left'合并,正如您在上面看到的,也有多行要合并,如图所示,结果pd.DataFrame实际上比left上的pd.DataFrame有更多行。

我希望这有帮助!

相关问题 更多 >