LoginSignup
0

More than 3 years have passed since last update.

【pandas】dataframe同士の結合時の注意

Last updated at Posted at 2019-11-28

類似記事を取得する関数を作っていたときに、なぜか結果が2回出力される。

実行プログラム
for index, row in df3.iterrows():
    result = model.docvecs.most_similar([model.infer_vector([texts[490]])], topn=5)
    print(result)
結果
[(61986, 0.4148428440093994), (93717, 0.40714001655578613), (67228, 0.39675790071487427), (18714, 0.39518919587135315), (71296, 0.39392682909965515)]
[(61986, 0.4148428440093994), (93717, 0.40714001655578613), (67228, 0.39675790071487427), (18714, 0.39518919587135315), (71296, 0.39392682909965515)]

most_similar関数の使い方が間違っているのかなと思い、公式サイトを読む。
特に関数の使い方で間違ってはなさそうだった。

不思議なので、ちょっと変更したプログラムで再度実行してみる。

実行プログラム
i = 0
for index, row in df3.iterrows():
  if index == 490:
    result = model.docvecs.most_similar([model.infer_vector([texts[490]])], topn=5)
    print(i, result)
    i += 1
結果
0 [(61986, 0.4148428440093994), (93717, 0.40714001655578613), (67228, 0.39675790071487427), (18714, 0.39518919587135315), (71296, 0.39392682909965515)]
1 [(61986, 0.4148428440093994), (93717, 0.40714001655578613), (67228, 0.39675790071487427), (18714, 0.39518919587135315), (71296, 0.39392682909965515)]

.........んんー?!if文が2回反応してるだとっ?! ゴシ(っд⊂)ゴシ

ハマりポイント

df3は、下記のようにpandasライブラリのdataframeで作りました。

実行プログラム
df = pd.read_json('/hoge_01.json')
df2 = pd.read_json('/hoge_02.json')
df3 = pd.concat([df,df2])

はい、これが原因でした。

pandasでは、dataframe同士をどう結合させるか決めることができ、上記のようにconcatする際に何も指定していないとindexは 振り直されません

つまり、

実行例
tdf = pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})
tdf1 = pd.DataFrame({'a':[4,5,6],'b':[7,8,9]})
pd.concat([tdf, tdf1])
実行結果
    a   b
0   1   4
1   2   5
2   3   6
0   4   7
1   5   8
2   6   9
↑
index

ということですね。

結合の仕方は色々とあるようで用途にあったやり方で結合させましょう。

dataframe同士の結合についての参考サイト
参考サイト:http://sinhrks.hatenablog.com/entry/2015/01/28/073327

終わり

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0