2017-01-25 8 views
3

この質問は数回見ましたが、回答がうまくいきません。私は2つのデータフレーム、split_dfcsv_dfを持っています。それぞれのフィールドにkeyと呼ばれる列をマージしようとしています。2台のパンダのデータフレームをマージする

common_df = pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right')) 

私が手:

はここでここで私はこのマージステートメントを実行csv_df

 key 
0 30000 
1 30002 
2 31288 
3 33630 
4 31663 

から上位5項目ですsplit_df

 key  tags 
2785 30000  ipv6 
2785 30000 networking 
2785 30000 wireless 
2785 30000 standards 
2785 30000  satcom 

から上位5項目です。

Empty DataFrame 
Columns: [key, tags] 
Index: [] 

プロセスは、マージが私のために働いていない理由を私は把握することはできません終了コード0

に仕上げました。助言がありますか?

私は両方のインデックスを持っている(と同様にそれらをマージして実行している)

csv_df.set_index('key') 
split_df.set_index('key') 

私はPytonとパンダに非常に新しいです

ありがとう!

答えて

3

上記のコードから、これは私の作品:

In [11]: pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right')) 
Out[11]: 
    key  tags 
0 30000  ipv6 
1 30000 networking 
2 30000 wireless 
3 30000 standards 
4 30000  satcom 

私の疑惑は、列の型keyは、あなたのデータフレームで異なっている(と私は同じint)ということです。

おそらく、そのうちの1つは文字列です(もう1つはfloat/intです)。

In [12]: split_df["key"] = split_df["key"].apply(str) 

In [13]: pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right')) 
Out[13]: 
Empty DataFrame 
Columns: [key, tags] 
Index: [] 

彼らは両方の文字列なら:

In [14]: csv_df["key"] = csv_df["key"].apply(str) 

In [15]: pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right')) 
Out[15]: 
    key  tags 
0 30000  ipv6 
1 30000 networking 
2 30000 wireless 
3 30000 standards 
4 30000  satcom 
+1

チェックですしながら、あなたのデータフレームのいずれかでkey列がintで、 'csv_df.dtypes' –

3

他はsplitt_df.dtypes` `とstr

split_df.key = split_df.key.astype(int) 
csv_df.key = csv_df.key.astype(int) 

pd.merge(split_df,csv_df, on=['key'], suffixes=('_left', '_right')) 
+0

ありがとうございました:それはそれでした:-) –

関連する問題