2016-05-08 10 views
5

pandas.mergeを使用して2つのデータフレームをマージしています。 how = leftオプションを指定した後でも、マージされたデータフレームの行数が元のものよりも大きいことがわかりました。なぜこれが起こるのですか?`pandas.merge`と` 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 

答えて

6

これは、あなたがleftに設定したキーと一致'name2'rightで複数の列を有するように聞こえます。

  • は左:

左フレームからキーのみを使用ししかし、結果オブジェクト内の行の実際の数は、必ずしもであることを行っていないpandas.DataFrame.merge()とオプション'how='left'を使用すると、それだけで意味しますleftオブジェクトの行数と同じです。

例:私はこれらを統合した場合

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

:この(左の希望のキーに複数のエントリがあることに注意してください)のように見えます

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

、その後、別のDF 2 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 

これもあなたに起こりましたgh私は上記のようにhow='left'とマージしました。単純に複数の行がマージされていました。ここに示されているように、pd.DataFrameの結果は実際にleftpd.DataFrameより多くの行を持っています。

こちらがお役に立てば幸いです。

+0

あなたの答えは完璧です!ありがとう!私の場合、 '.drop_duplicates(subset =" name2 ")'は重複した行を削除し、それは私の目的のためにうまくいきました! – user51966

+0

運が良かったのはうれしかった! – Thanos

関連する問題