2017-06-22 30 views
9

Các documentation cho lập luận trong tiêu đề của bài này nói:Trên luận float_precision để pandas.read_csv

float_precision: chuỗi, mặc định Không

Chỉ định chuyển đổi động cơ C nên sử dụng cho các giá trị dấu phẩy động. Các tùy chọn là Không có cho bộ chuyển đổi thông thường, cao cho bộ chuyển đổi có độ chính xác cao và round_trip cho bộ chuyển đổi chuyến đi khứ hồi.

Tôi muốn tìm hiểu thêm về ba thuật toán được đề cập, tốt nhất là không phải đào sâu vào mã nguồn .


Q: Do các thuật toán có tên tôi có thể Google để tìm hiểu chính xác những gì họ làm và làm thế nào chúng khác nhau?


(Ngoài ra, một bên câu hỏi:? Những gì chính xác là "động cơ C" trong bối cảnh này có phải là một điều Pandas cụ thể, hoặc một điều Python toàn Không có ở trên?)


Không phải là quen thuộc với các cơ sở mã trong câu hỏi, tôi hy vọng nó sẽ đưa tôi một thời gian dài chỉ để xác định vị trí mã nguồn có liên quan. Nhưng thậm chí giả sử tôi xoay xở tìm được nó, trải nghiệm của tôi với loại thuật toán này là triển khai của chúng được tối ưu hóa rất cao và ở mức thấp như vậy, mà không có một số mô tả cấp cao, nó thực sự khó, ít nhất là với tôi, làm theo những gì đang xảy ra.

+1

Tôi chỉ đang chơi với điều này bằng cách sử dụng một ví dụ đơn giản và tốt nhất tôi có thể nói mọi thứ chỉ được đọc với độ chính xác gấp đôi được chỉ định trong tùy chọn float_precision. Nếu không nghiên cứu nhiều hơn, tôi có xu hướng giả sử gấp đôi (64bits) là tốt cho 99,99% của tất cả các nhiệm vụ, và nếu không tôi sẽ đọc như một chuỗi và xử lý tiếp theo khi cần thiết (64 bit là độ chính xác cao nhất được hỗ trợ bởi gấu trúc/gấu trúc, ít nhất là theo nghĩa thông thường). Nhưng, câu hỏi hay !!! – JohnE

+3

Tôi không có thời gian để có câu trả lời đúng, nhưng đọc qua https://github.com/pandas-dev/pandas/issues/8002 và https://github.com/pandas-dev/pandas/pull/8044 sẽ cung cấp cho bạn nền. –

Trả lời

1

Bạn hỏi về các thuật toán thực tế - gần nhất tôi có thể tìm thấy là: https://github.com/pandas-dev/pandas/blob/master/pandas/_libs/parsers.pyx#L492

này được lấy từ một câu trả lời liên quan, thanh danh cho MaxU (Understanding pandas.read_csv() float parsing)

Ordinary: double_converter_nogil = xstrtod 
High: double_converter_nogil = precise_xstrtod 
Round-Trip: double_converter_withgil = round_trip 

Từ đây, bạn đang ở trong C-land. Bạn cũng hỏi lý do tại sao gấu trúc sử dụng đường dẫn mã C quan trọng được viết bằng Cython hoặc C.

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