Pour le contexte, mon ensemble de données maître est un DataFrame de 24541 lignes x 1830 colonnes rempli de NaN ou d'un flottant (cours de l'action). Je traite ce DataFrame 11 fois, chaque fois en définissant des valeurs dans un DataFrame moulé avec le même index et les mêmes colonnes. Un exemple des deux DataFrames est ci-dessous:
Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '44792': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85753': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20220': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12044': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20239': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28433': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12052': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12060': {Timestamp('1925-12-31 00:00:00'): 326.0, Timestamp('1926-01-02 00:00:00'): 326.5, Timestamp('1926-01-04 00:00:00'): 325.0, Timestamp('1926-01-05 00:00:00'): 325.5, Timestamp('1926-01-06 00:00:00'): 326.25}, '12062': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85792': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12067': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77605': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77606': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20263': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12073': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12076': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12079': {Timestamp('1925-12-31 00:00:00'): 117.5, Timestamp('1926-01-02 00:00:00'): 124.25, Timestamp('1926-01-04 00:00:00'): 127.125, Timestamp('1926-01-05 00:00:00'): 123.75, Timestamp('1926-01-06 00:00:00'): 124.5}, '61241': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12095': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28484': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '53065': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20298': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77644': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28505': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '53081': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77659': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12124': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77661': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28513': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '61284': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77668': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12140': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85869': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20343': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28548': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77702': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12167': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85908': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12183': {Timestamp('1925-12-31 00:00:00'): 78.5, Timestamp('1926-01-02 00:00:00'): 78.0, Timestamp('1926-01-04 00:00:00'): 77.5, Timestamp('1926-01-05 00:00:00'): 76.875, Timestamp('1926-01-06 00:00:00'): 76.5}, '44951': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85913': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85914': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12191': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20386': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77730': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28580': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85926': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20394': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '69550': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12212': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20407': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12220': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20415': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77768': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85963': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20431': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '45014': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '61399': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '69607': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '85991': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '53225': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20474': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20482': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86021': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '45065': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12298': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '69649': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12308': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20503': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '45081': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86041': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12319': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20511': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12343': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12345': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20554': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12369': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20562': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86102': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20570': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86111': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12394': {Timestamp('1925-12-31 00:00:00'): 123.5, Timestamp('1926-01-02 00:00:00'): 124.0, Timestamp('1926-01-04 00:00:00'): 123.25, Timestamp('1926-01-05 00:00:00'): 123.5, Timestamp('1926-01-06 00:00:00'): 122.75}, '36978': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86136': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28804': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86158': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12431': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '61583': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20626': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '77976': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '53401': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '86176': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12449': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '69796': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12456': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '45225': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '12458': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '20650': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, '28847': {Timestamp('1925-12-31 00:00:00'): nan, Timestamp('1926-01-02 00:00:00'): nan, Timestamp('1926-01-04 00:00:00'): nan, Timestamp('1926-01-05 00:00:00'): nan, Timestamp('1926-01-06 00:00:00'): nan}, ...}
Les valeurs dans MA_a_frame (et 10 autres DataFrames identiques) doivent être définies sur 1 si une certaine condition dans le DataFrame "data" est remplie. À savoir, si le prix dans "data" est à moins de 1% (l'argument est "j") d'une valeur calculée dans un DataFrame complètement différent généré dans une fonction précédente. Ainsi, au total, chaque itération traitera jusqu'à 3 grandes DataFrames.
En ce qui concerne mon itérateur, je crée simplement deux listes séparées ("dates" et "titres") en utilisant data.columns et data.index. Je suis donc essentiellement en train d'itérer indirectement l'index et les colonnes des données. Sans plus tarder, voici la base du code qui s'exécute 11 fois au total dans mon programme (la partie que j'essaie d'accélérer!):
Out[23]: 49154 65541 32791 65568 ... 24563 81910 24571 90110 DATE ... 2018-12-24 76.3430 258.376200 NaN NaN ... NaN 19.8672 NaN NaN 2018-12-26 75.9530 258.143600 NaN NaN ... NaN 19.7980 NaN NaN 2018-12-27 75.5552 258.127199 NaN NaN ... NaN 19.7238 NaN NaN 2018-12-28 75.1382 257.878799 NaN NaN ... NaN 19.6440 NaN NaN 2018-12-31 74.7716 257.683199 NaN NaN ... NaN 19.5600 NaN NaN [5 rows x 1830 columns]
Maintenant , le problème est qu'un cycle de ce code prend environ 8 heures. Ainsi, je regarde près de 90 heures par course. J'ai un article académique en attente de diplôme, et la date limite commence vraiment à me faire peur avec ces chiffres! En supposant que ma sortie soit parfaite, les choses devraient bien se passer, mais je serais éternellement reconnaissant si quelqu'un avait une suggestion qui pourrait réduire la vitesse. Sinon, je devrai peut-être réduire la gamme des données, réduisant ainsi la puissance de mon analyse statistique.
P.S. Je l'exécute via Spyder sur Windows 10 avec un Intel i7 3970X. Je n'ai accès à aucune autre puissance de calcul. J'ai envisagé l'accélération GPU mais mon GPU est une GTX 670 qui n'est pas Pascal et donc incompatible avec CuDF.
Modifier:
Voici les cinq dernières lignes du DataFrame de données:
s.head() Out[16]: 49154 65541 32791 65568 ... 24563 81910 24571 90110 DATE ... 2018-12-24 61.55 232.70000 NaN NaN ... NaN 15.71 NaN NaN 2018-12-26 65.11 244.59000 NaN NaN ... NaN 16.48 NaN NaN 2018-12-27 64.71 252.17999 NaN NaN ... NaN 16.71 NaN NaN 2018-12-28 64.96 249.64999 NaN NaN ... NaN 16.55 NaN NaN 2018-12-31 66.09 254.50000 NaN NaN ... NaN 16.74 NaN NaN [5 rows x 1830 columns]
Et voici un exemple de l'une des comparaisons DataFrames:
def gen_a(): for date in dates: for security in securities: try: if type(data.loc[date, security]) is not float: pass #lots of the data is NaN, so skip these altogether elif j > math.log( MA_a_csv.loc[date, security]/ data.loc[date, security]) > -j: MA_dict['a'].loc[date, security] = 1 print(f'Passed {date}, {security}') except: print(f'Failed {date}, {security}')
Edit 2:
Sur demande, voici data.head (). To_dict ():
data = pd.DataFrame.from_csv(filepath) data = pd.DataFrame(data=data, dtype=np.float64) #dataset of daily prices data.head() Out[14]: 49154 65541 32791 65568 ... 24563 81910 24571 90110 DATE ... 1925-12-31 NaN NaN NaN NaN ... NaN NaN NaN NaN 1926-01-02 NaN NaN NaN NaN ... NaN NaN NaN NaN 1926-01-04 NaN NaN NaN NaN ... NaN NaN NaN NaN 1926-01-05 NaN NaN NaN NaN ... NaN NaN NaN NaN 1926-01-06 NaN NaN NaN NaN ... NaN NaN NaN NaN [5 rows x 1830 columns] MA_a_frame = pd.DataFrame( data=0, index=data.index, columns=data.columns) #bool DataFrame MA_a_frame.head() Out[15]: 49154 65541 32791 65568 ... 24563 81910 24571 90110 DATE ... 1925-12-31 0 0 0 0 ... 0 0 0 0 1926-01-02 0 0 0 0 ... 0 0 0 0 1926-01-04 0 0 0 0 ... 0 0 0 0 1926-01-05 0 0 0 0 ... 0 0 0 0 1926-01-06 0 0 0 0 ... 0 0 0 0 [5 rows x 1830 columns]
Malheureusement, je suis à court d'espace pour ce message, mais MA_a_csv.head (). to_dict () produit la même chose que ci-dessus sauf tout NaN plutôt que le seul point de données.
3 Réponses :
Peut-être utiliser l'argument chunksize
lors de la lecture de csv. Vous devrez jouer pour déterminer la meilleure taille à utiliser, mais j'ai entendu dire qu'une bonne règle de base est de la définir sur une taille de la moitié de votre mémoire disponible.
df.to_csv("yourresults.csv", mode='a')
lors de la réécriture de vos résultats au fichier, vous devrez vous assurer d'ajouter le jeu d'arguments:
df = pd.read_csv("your.csv", chucksize=memory/2)
Supprimez le fichier à chaque fois que vous exécutez votre code ou assurez le premier appel de to_csv () est fait en mode écriture (par défaut).
Autres options que j'essaierais:
1) Utilisez une ressource cloud telle que AWS EC2 et achetez une mémoire haute spécification machine, transférez-y vos données et votre code et faites-lui exécuter votre code. Cela devrait être beaucoup plus rapide.
2) Je chercherais à diviser la charge sur plusieurs machines en utilisant quelque chose comme Pyspark mais cela pourrait prendre un peu de temps pour s'accélérer sinon déjà familier.
Bonne chance!
Faire cela avec un budget de premier cycle ... AKA 0 $. Merci pour la réponse - Je vais essayer d'utiliser l'option n ° 2 avec mon ordinateur portable!
Modifié pour inclure l'option Chunksize
Il me semble que vous pourriez accélérer les choses en vous débarrassant des deux boucles. Créez un mcve avec un df plus petit, disons 5 * 10. Ensuite, nous pouvons voir s'il est possible de vectoriser votre fonction. Cela pourrait vous donner un énorme coup de pouce.
Ensuite, au lieu de pyspark, qui pourrait être pénible à régler, vous pouvez jeter un œil à dask.
@ burlap101 ce serait une bonne réponse si le jeu de données était plus grand ou si la machine manquait de mémoire
Combinaison de deux courts commentaires en une réponse.
1) L'énoncé
j > math.log( MA_a_csv.loc[date, security]/ data.loc[date, security]) > -j
peut être légèrement simplifié en faisant abs
, par exemple j> abs (...)
et pourrait être considérablement accélérée en calculant le journal une fois séparément et en tirant parti du fait que log (a / b) == log (a) - log (b)
.
Même si le calcul n'est fait qu'une seule fois pour une cellule, vous pourrez peut-être le calculer et le réécrire, pour accélérer re-exécute.
2) Si vous avez ces instructions d'impression dans votre code réel, elles prendront une très grande partie du temps total.
J'ai les instructions d'impression dans mon code réel. J'ai présumé à tort que leurs frais généraux seraient négligeables. Je me sens aussi idiot maintenant, ne pensant plus à utiliser uniquement les abdos () ... Merci pour les modifications suggérées!
Puisque les indices sont les mêmes pour les DF en question, je ne vois vraiment pas pourquoi vous auriez besoin de boucler du tout. Pandas est construit sur numpy, ce qui rend la diffusion de choses comme abs
et np.log
extrêmement efficace. Vous pourriez peut-être combiner cela avec mon commentaire précédent, np.log (df1 / df2)
et abs
@ G.Anderson a absolument raison sur ce point. Chaque fois que vous écrivez une boucle à la main, vous allez être beaucoup plus lent que les opérations intégrées (et cela vous empêche de faire quelque chose comme mettre une impression dans la boucle serrée ^^)
J'ai créé mon propre générateur de données d'échantillons basé sur les exemples que vous avez donnés. Je pense que cela correspond à ce que vous avez, mais faites-moi savoir si ce n'est pas le cas. Si les données correspondent, ne vous inquiétez pas des détails de la façon dont je les ai faites.
0 1 2 3 4 1928-12-31 1 0 0 0 0 1929-01-01 0 0 0 0 0 1929-01-02 1 1 0 1 0 1929-01-03 0 1 1 1 1 1929-01-04 0 1 0 1 1 1929-01-05 1 0 1 1 1
Donc, les données
ressemblent à
logs = np.log(MA_a_csv / data) ans = ((j > logs) & (logs > -j)).replace({True: 1, False: 0})
Wow - cela a parfaitement fonctionné et a analysé toutes les données en quelques secondes. J'espérais qu'il y avait une solution comme celle-ci qui pourrait fonctionner sur l'ensemble du tableau à la fois. Tout ce que je peux dire, c'est merci beaucoup; tu viens de me faire gagner des heures et des heures! Au plaisir de jeter un œil à votre lecture suggérée.
Cette réponse est si jolie et parfaite que je pourrais pleurer! Beau travail sur la vectorisation
Pouvez-vous fournir un exemple où les dataframes ont réellement des valeurs, ou des dfs de valeurs factices? Cela ressemble, en surface, à une opération qui pourrait et devrait être vectorisée à l'aide d'un masquage booléen, mais sans entrées utilisables et sorties souhaitées, il est difficile de savoir comment aider
Désolé, l'ensemble du processus est très compliqué. J'ai édité mon OP.
Salut R. Young, pourriez-vous s'il vous plaît mettre à jour votre question avec la sortie de
data..head (). To_dict ()
et la même chose pour la comparaison df?Et jetez un œil à mcve . Votre exemple n'est pas reproductible.
Une possibilité: créer un DF intermédiaire avec
df3 = np.log (df1 / df2)
et utilisernp.where
pour masquer ou définir les valeurs basées sur j