2013-08-24 39 views
5

Vì một lý do nào đó, tôi không thể hợp nhất để hoạt động chính xác.Dataframe Merge in Pandas

Dataframe này (rspars) có 2.000+ hàng ...

rsparid f1mult f2mult f3mult 
0  1 0.318 0.636 0.810 
1  2 0.348 0.703 0.893 
2  3 0.384 0.777 0.000 
3  4 0.296 0.590 0.911 
4  5 0.231 0.458 0.690 
5  6 0.275 0.546 0.839 
6  7 0.248 0.486 0.731 
7  8 0.430 0.873 0.000 
8  9 0.221 0.438 0.655 
9  11 0.204 0.399 0.593 

Khi cố gắng tham gia ở trên để một bảng dựa trên rsparid cột để Dataframe này ...

  line_track line_race rsparid 
line_date        
2013-03-23   TP   10 1400 
2013-02-23   GP   7  634 
2013-01-01   GP   7 1508 
2012-11-11  AQU   5  96 
2012-10-11  BEL   2  161 

Sử dụng ...

df = pd.merge(datalines, rspars, how='left', on='rsparid') 

Tôi nhận được khoảng trống ..

line_track line_race rsparid f1mult f2mult f3mult 
0   TP   10 1400  NaN  NaN  NaN 
1   TP   10 1400  NaN  NaN  NaN 
2   TP   10 1400  NaN  NaN  NaN 
3   GP   7  634  NaN  NaN  NaN 
4   GP   10  634  NaN  NaN  NaN 

Lưu ý, cột "datalines" có thể có hàng nghìn hàng hơn so với rspars, do đó kết nối bên trái. Tôi phải làm việc gì đó sai lầm?

Tôi cũng đã cố gắng nó theo cách này ...

df = datalines.merge(rspars, how='left', on='rsparid') 

VÍ DỤ # 2

Anh đã đánh rơi những dữ liệu xuống một vài dòng ...

rspars:

rsparid f1mult f2mult f3mult 
0  1400 0.216 0.435 0.656 

datalines:

rsparid 
0 1400 
1  634 
2 1508 
3  96 
4  161 
5 1011 
6 1007 
7  518 
8 1955 
9  678 

sáp nhập ...

datalines.merge(rspars, how='left', on='rsparid') 

Output ...

rsparid f1mult f2mult f3mult 
0 1400  NaN  NaN  NaN 
1  634  NaN  NaN  NaN 
2 1508  NaN  NaN  NaN 
3  96  NaN  NaN  NaN 
4  161  NaN  NaN  NaN 
5 1011  NaN  NaN  NaN 
6 1007  NaN  NaN  NaN 
7  518  NaN  NaN  NaN 
8 1955  NaN  NaN  NaN 
9  678  NaN  NaN  NaN 
+0

Bạn có thể hiển thị một chút dữ liệu 'datalines' không? –

+0

Biểu dữ liệu được hiển thị đầu tiên là rspars. Bảng dữ liệu có hàng chục trường trong đó một trường là rsparid. – TravisVOX

+0

Tôi đã thêm một số thông tin khác để làm rõ. – TravisVOX

Trả lời

4

Các NaN s có nghĩa là họ không có giá trị trong rsparid điểm chung. Điều này có thể khó khăn khi sáp nhập điều có thể trông giống nhau khi họ repr

Các repr nhỏ DataFrames với chuỗi (số nguyên) hoặc số nguyên trông giống nhau và không có thông tin dtype được in khi khung nhỏ. Bạn có thể lấy thông tin này (và nhiều hơn nữa) cho các khung nhỏ bằng cách gọi phương thức DataFrame.info(), như sau: df.info(). Điều này sẽ cung cấp cho bạn một bản tóm tắt tốt đẹp của những gì trong DataFrame và những gì dtype s các cột của nó là:

In [205]: datalines_int = DataFrame({'rsparid':[1400,634,1508,96,161,1011,1007,518,1955,678]}) 

In [206]: datalines_str = DataFrame({'rsparid':map(str,[1400,634,1508,96,161,1011,1007,518,1955,678])}) 

In [207]: datalines_int 
Out[207]: 
    rsparid 
0  1400 
1  634 
2  1508 
3  96 
4  161 
5  1011 
6  1007 
7  518 
8  1955 
9  678 

In [208]: datalines_str 
Out[208]: 
    rsparid 
0 1400 
1  634 
2 1508 
3  96 
4  161 
5 1011 
6 1007 
7  518 
8 1955 
9  678 

In [209]: datalines_int.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 10 entries, 0 to 9 
Data columns (total 1 columns): 
rsparid 10 non-null values 
dtypes: int64(1) 

In [210]: datalines_str.info() 
<class 'pandas.core.frame.DataFrame'> 
Int64Index: 10 entries, 0 to 9 
Data columns (total 1 columns): 
rsparid 10 non-null values 
dtypes: object(1) 

LƯU Ý: Bạn sẽ nhận thấy một chút chênh lệch trong repr s đây, nhiều khả năng vì đệm của số DataFrame s. Điểm là, không ai thực sự có thể thấy rằng bằng cách sử dụng này tương tác, trừ khi họ đã được cụ thể tìm kiếm sự khác biệt.

+0

Tôi chỉ cần thêm vào ví dụ làm thế nào tôi lập chỉ mục bảng rspar để hiển thị rsparid không tồn tại. Nó đến thẳng từ một tập tin CSV thông qua 'read_csv' và nó là của rsparid chắc chắn trong đó. – TravisVOX

+0

Tôi nghĩ bạn hiểu nhầm 'hợp nhất'. Nếu không có * giá trị * trong 'datalines.rsparid' bằng với các giá trị trong' rspars.rsparid' thì bạn sẽ nhận được 'NaN' bởi vì không có gì để tham gia. –

+0

Hey, nếu bạn kiểm tra ví dụ thứ hai của tôi, nơi tôi giảm dữ liệu xuống chỉ là những gì có, tôi vẫn gặp vấn đề. – TravisVOX

Các vấn đề liên quan