2016-06-22 50 views
5

Tôi có 2 DataFrames mà tôi muốn hợp nhất. Tôi đã xem các tài liệu và cố gắng thực hiện các hoạt động sau đây nhưng một nhận được bối rối như thế nào để làm điều đó. Như tôi đã nói tôi có 2 DataFrames:Hợp nhất hai DataFrames

df1: 

     id  name type currency 
0 BTA.S Applewood Hard  GBp 
1 VOD.S Softwood Soft  GBp 

df2: 

    id 
BTA.S 301.221525 
VOD.S 213.791400 

và tôi muốn trả lại:

 id  name type currency  price 
0 BTA.S Applewood Hard  GBp 301.221525 
1 VOD.S Softwood Soft  GBp 213.791400 

Trường hợp cột giá từ df2 được sáp nhập với df1. (Chỉ cần để cho bạn biết sẽ có rất nhiều loại gỗ hơn vào thời điểm tôi đã hoàn thành).

Tôi đã thử một vài phương pháp để làm điều này:

Result = df1.merge(df2[['*.S']], left_on='id', right_index=True) 

nơi tôi đã gặp các ngoại lệ:

ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'> 

Result = pd.concat([Df1, Df2], axis=1, ignore_index=True) 

nơi tôi có được ngoại lệ:

ValueError: labels ['type'] not contained in axis 

Nhưng tôi đang bối rối. Xin lỗi nếu đây là câu hỏi cơ bản. Bất kì sự trợ giúp nào đều được đánh giá cao. Rất cám ơn

Trả lời

16

Thông báo lỗi cho biết rằng df2 thuộc loại pd.Series. Bạn cần phải chuyển đổi df2.to_frame() như .merge() cần một pd.DataFrame() đầu vào (see docs):

df1.merge(df2[['*.S']].to_frame(), left_on='id', right_index=True) 

trong khi bạn có lẽ cũng chỉ có thể:

df1.merge(df2.to_frame(), left_on='id', right_index=True) 

Ngoài ra, bạn có thể sử dụng pd.DataFrame.join() mà chấp nhận một pd.Series.

2

Lỗi này có nghĩa là một trong các đối tượng của bạn là không phải Khung dữ liệu gấu trúc.

ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'> 

Để chứng minh điều này cho chính mình,

print(type(df2)) 

Và đó nên sản lượng pandas.core.series.Series

Để đạt được kết quả mong muốn của bạn,

df2 = df2.to_frame().reset_index() 
df2.columns = ['id', 'price'] 
df1.merge(df2) 

Đầu ra:

id name type currency price 
0 BTA.S Applewood Hard GBp  301.221525 
1 VOD.S Softwood Soft GBp  213.791400 
1

Bạn chỉ có thể thêm df2 (mà là một Series, không phải là một DataFrame) như là một cột mới

df['price']=df2 
Các vấn đề liên quan