Merge the frames into one frame, taking the common columns. Return None if there is no common columns. Parameters ---------- frames : List[Frame] List of frames ids : List[int] List of frame IDs col_names : List[str], optional Column names to conside
(frames, ids, col_names=None)
| 6559 | |
| 6560 | |
| 6561 | def combine_frames(frames, ids, col_names=None): |
| 6562 | """Merge the frames into one frame, taking the common columns. |
| 6563 | |
| 6564 | Return None if there is no common columns. |
| 6565 | |
| 6566 | Parameters |
| 6567 | ---------- |
| 6568 | frames : List[Frame] |
| 6569 | List of frames |
| 6570 | ids : List[int] |
| 6571 | List of frame IDs |
| 6572 | col_names : List[str], optional |
| 6573 | Column names to consider. If not given, it considers all columns. |
| 6574 | |
| 6575 | Returns |
| 6576 | ------- |
| 6577 | Frame |
| 6578 | The resulting frame |
| 6579 | """ |
| 6580 | # find common columns and check if their schemes match |
| 6581 | schemes = None |
| 6582 | for frame_id in ids: |
| 6583 | frame = frames[frame_id] |
| 6584 | if frame.num_rows == 0: |
| 6585 | continue |
| 6586 | if schemes is None: |
| 6587 | schemes = frame.schemes |
| 6588 | if col_names is not None: |
| 6589 | schemes = {key: frame.schemes[key] for key in col_names} |
| 6590 | continue |
| 6591 | for key, scheme in list(schemes.items()): |
| 6592 | if key in frame.schemes: |
| 6593 | if frame.schemes[key] != scheme: |
| 6594 | raise DGLError( |
| 6595 | "Cannot concatenate column %s with shape %s and shape %s" |
| 6596 | % (key, frame.schemes[key], scheme) |
| 6597 | ) |
| 6598 | else: |
| 6599 | del schemes[key] |
| 6600 | |
| 6601 | if len(schemes) == 0: |
| 6602 | return None |
| 6603 | |
| 6604 | # concatenate the columns |
| 6605 | to_cat = lambda key: [frames[i][key] for i in ids if frames[i].num_rows > 0] |
| 6606 | cols = {key: F.cat(to_cat(key), dim=0) for key in schemes} |
| 6607 | return Frame(cols) |
| 6608 | |
| 6609 | |
| 6610 | def combine_names(names, ids=None): |
no test coverage detected