2017-06-22 1 views
9

Le documentation pour l'argument dans le titre de ce billet dit:Sur l'argument float_precision à pandas.read_csv

float_precision: string , par défaut Aucun

Indique le convertisseur le moteur C doit utiliser pour les valeurs à virgule flottante. Les options sont Aucun pour le convertisseur ordinaire, haut pour le convertisseur de haute précision, et round_trip pour le convertisseur aller-retour.

Je voudrais en savoir plus sur les trois algorithmes mentionnés, de préférence sans avoir à creuser dans le code source .


Q:-ce que ces algorithmes ont des noms que je peux Google pour savoir exactement ce qu'ils font et comment ils diffèrent?


(De plus, un côté question: quelle est exactement « le moteur C » dans ce contexte Est-ce une chose spécifique à Pandas, ou une chose Python à l'échelle Aucune de ces?)


ne connaissant pas la base de code en question, je pense que cela me prendra beaucoup de temps juste pour localiser le code source correspondant. Mais même en supposant que je réussisse à le trouver, mon expérience avec ce type d'algorithme est que leurs implémentations sont tellement optimisées, et à un niveau si bas, que sans une description de haut niveau, il est vraiment difficile, du moins pour moi, de suis ce qui se passe.

+1

Je ne faisais que jouer avec ceci en utilisant un exemple simple et au mieux je peux dire que tout se lit comme une double précision, indépendamment de ce que est spécifié dans l'option float_precision. Sans faire plus de recherche, j'aurais tendance à supposer que le double (64 bits) est bien pour 99,99% de toutes les tâches, sinon je l'aurais lu comme une chaîne et faire un traitement ultérieur selon les besoins (64 bits est la précision float la plus élevée soutenu par numpy/pandas, au moins dans un sens normal). Mais, bonne question !!! – JohnE

+3

Je n'ai pas le temps maintenant pour une bonne réponse, mais en lisant https://github.com/pandas-dev/pandas/issues/8002 et https://github.com/pandas-dev/pandas/pull/8044 devrait vous donner l'arrière-plan. –

Répondre

1

Vous avez demandé sur les algorithmes réels - le plus proche que je peux trouver est: https://github.com/pandas-dev/pandas/blob/master/pandas/_libs/parsers.pyx#L492

Ce provient d'une réponse connexe, kudos à 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 

De là, vous sommes dans C-land. Vous avez également demandé pourquoi les pandas utilisent C - les chemins de code critiques sont écrits en Cython ou C.