Cách kết hợp nhiều hàm trong Python

Công việc khung quản lý dữ liệu thường được tôn trọng nhất đối với các phương thức và chức năng của chúng. Điều này có thể là do các phương thức này có thể khá khó xây dựng nhưng cũng cực kỳ tiện lợi. Có rất nhiều điều để tìm hiểu về việc di chuyển và thao tác dữ liệu, và điều tuyệt vời khi thực hiện một dự án như thế này là tôi có cơ hội tạo ra các thuật toán của riêng mình

Đối với những người không quen thuộc với dự án của tôi, OddFrames. jl, đây là gói hướng đối tượng có chọn lọc để quản lý dữ liệu trong Julia. Tất nhiên, các ứng dụng của gói này chủ yếu dựa trên tính toán khoa học. Điều đó đang được nói, nó chắc chắn là một dự án thú vị và mát mẻ. Nếu bạn muốn xem Github cho dự án này, bạn có thể ở đây

GitHub - ChifiSource/OddFrames. jl. Gói DataFrames hướng đối tượng

khung lẻ. jl là một loại gói thao tác và quản lý dữ liệu mới dành cho Julia. Trong khi nhiều gói tương tự…

github. com

Hôm nay chúng ta sẽ kết hợp một số chức năng mới sẽ cho phép chúng ta kết hợp các OddFrames lại với nhau một cách dễ dàng. Tôi có một vài kế hoạch thú vị để tiếp cận vấn đề này theo mô hình khôn ngoan và tôi dự định thực hiện một số công việc thú vị với các chức năng, tôi biết rằng một chức năng hợp nhất sẽ đặc biệt khó khăn, vì vậy, chúng ta hãy cùng nhau thực hiện. . Một điều cuối cùng, nếu bạn muốn đọc thêm một chút về OddFrames. jl, đây là bài viết trước tôi đã viết trên gói mà tôi đã viết trình phân tích cú pháp CSV

Nỗi đau khốn khổ mà tôi đã trải qua khi tạo trình đọc CSV ở Julia

Bạn đã bao giờ tự hỏi các tệp CSV được phân tích cú pháp như thế nào chưa?

hướng tới khoa học dữ liệu. com

Sửa đổi Constructor

Vì có rất nhiều hàm tạo nên tôi sẽ tập trung vào các ví dụ của bài viết này về công văn cho các cặp

function OddFrame[p::Pair ...]

Tuy nhiên, trước khi chúng ta đi sâu vào chức năng này, chúng ta hãy xem nhanh hàm tạo bên ngoài để biết một chút ngữ cảnh

mutable struct OddFrame x == x,
labels][1]][1]]
dtype[x::Symbol, y::Type] = _dtype[columns[findall[x->x == x,
labels][1]], y]

Đây là phần của hàm tạo nơi tôi sẽ thêm mã. Tôi chỉ đơn giản là sẽ thêm một số chức năng điều phối cho một chức năng mới có tên là hợp nhất. []. Bạn có thể nhận thấy rằng ở đây hợp nhất. [] có một điểm giải thích, chỉ ra rằng phương thức này sẽ thay đổi [các] loại mà nó được gọi. Trong trường hợp này, chúng tôi sẽ muốn một OddFrame được cung cấp để hợp nhất OddFrame tại. Phương pháp của chúng tôi cũng sẽ cần dữ liệu từ OddFrame hiện tại của chúng tôi. Đây là những gì tôi nghĩ ra

# Merge
merge_def = labels[length[labels]]
merge![od::OddFrame; at::Symbol = merge_def] = _merge![labels,
columns, od, at]
merge![x::Array; at::Symbol = merge_def] = _merge![labels,
columns, od, at]
merge_defi = length[labels]
merge![od::OddFrame; at::Int64 = merge_defi] = _merge![labels,
columns, od, at]
merge![x::Array, at::Int64 = merge_defi] = _merge![lables,
columns, od, at]

Hai lần hợp nhất đầu tiên dành cho đối số từ khóa at dưới dạng ký hiệu, hai lần hợp nhất thứ hai dành cho đối số từ khóa at dưới dạng số nguyên. Chúng tôi thực sự có thể thay đổi đối số từ khóa mặc định của mình ở đây bằng cách gán nó cho một bí danh, e. g. merge_def, vấn đề duy nhất với phương pháp này là các chức năng sẽ không bao giờ được xác định lại. Nói cách khác, có thể tốt hơn nếu có giá trị mặc định ở đây và sử dụng điều kiện, vì độ dài của OddFrame của chúng tôi có thể thay đổi, vì vậy chúng tôi không muốn đặt chỉ mục là 5 nếu chúng tôi bỏ một số cột và bây giờ độ dài của chúng tôi . Hãy để chúng tôi thay đổi điều đó

# Merge
merge![od::OddFrame; at::Symbol = :end] = _merge![labels,
columns, od, at]
merge![x::Array; at::Symbol = :end] = _merge![labels,
columns, od, at]
merge_defi = length[labels]
merge![od::OddFrame; at::Int64 = 0] = _merge![labels,
columns, od, at]
merge![x::Array, at::Int64 = 0] = _merge![lables,
columns, od, at]

Bây giờ tất cả những gì chúng ta phải làm là kết thúc kiểu này bằng hàm new[]

# type
new[labels, columns, types, head, drop, dropna, dtype];

Phương pháp hợp nhất

Trước khi chúng ta bắt đầu viết _merge. [], trước tiên chúng ta hãy viết merge[]. Trái ngược với hai hàm chúng ta vừa viết sẽ gọi _merge. [] trong thành viên_funcs. jl, chúng tôi hiện đang làm việc trong các phương thức. jl. Tôi sẽ viết một phương thức để hợp nhất hai OddFrame theo cách không đột biến và trả về một OddFrame mới. Sự khác biệt lớn giữa các chức năng được lưu trữ trong các phương thức. jl và member_funcs. jl là các hàm thành viên là con của loại, điều này thường có nghĩa là chúng sẽ làm việc với các mảng của chúng ta, trong khi các phương thức thường sẽ sử dụng các hàm thành viên đó song song với lập chỉ mục và tất cả các thuộc tính khung khác để đóng góp cho API. Điều đó đang được nói, đối số của chúng tôi ở đây chỉ có thể là hai OddFrames. Tôi cũng sẽ tiếp tục và lấy nhãn ra

function merge[od::AbstractMutableOddFrame,
od2::AbstractOddFrame; at::Int64 = width[od]]
# f = od, s = od2
flabels = od.labels
slabels = od2.labels
end

Hiện tại, chúng tôi sẽ sử dụng chiều rộng [od] để điền vào cuộc gọi, điều này sẽ bị giới hạn đối với trục đại diện cho chỉ mục. Khi ở trong hàm, chúng ta có thể tiếp tục và thực hiện một số thao tác khởi tạo

________số 8_______

Chúng tôi chỉ đơn giản là tạo một tập hợp các cặp mới, sau đó gửi chúng trở lại hàm tạo OddFrame và trả về một OddFrame mới. Tôi cũng sẽ thêm một cú ném nếu kích thước của OddFrame của chúng tôi là hợp lệ, ví dụ:. g. chúng tôi có một OddFrame có 3 cột nhưng ai đó cố hợp nhất ở cột 5

if at > width[od] || at < 1
throw[BoundsError["Merge position is not an index on this OddFrame!"]]
end

Chúng ta sẽ cần liệt kê các chỉ mục của mình bằng phương thức enumerate[] trong vòng lặp for sẽ theo sau,

mutable struct OddFrame 

Chủ Đề