A.- Par contrat du 14 décembre 1987, la Compagnie d'Assurances Y._ a remis à bail à les époux T._ un appartement dans un immeuble à Genève. Devenue propriétaire de l'immeuble, la SI X._ a succédé à la bailleresse dès le 1er septembre 1995. Par lettre du 23 février 1998, les locataires ont sollicité une baisse de loyer de 15%, en invoquant la réduction du taux hypothécaire et l'évolution du coût de la vie. La bailleresse s'y est opposée par lettre du 27 février 1998. Par avis de majoration du 9 mars 1998, la bailleresse a notifié une augmentation de loyer, celui-ci devant passer de 18 420 fr. l'an à 19 512 fr. dès le 1er juillet 1998, puis, en divers échelons, à 23 880 fr. dès le 1er juillet 2002. La bailleresse invoquait une adaptation aux loyers usuels. Les locataires se sont opposés à la hausse. Les deux litiges furent joints devant le Tribunal des baux et loyers du canton de Genève. B.- Par jugement du 1er février 1999, le Tribunal des baux et loyers débouta la bailleresse de toutes ses prétentions en augmentation du loyer et admit intégralement la demande de baisse, fixant le loyer à 15 660 fr. l'an dès le 1er juillet 1998. Saisie d'un appel émanant de la bailleresse, la Chambre d'appel en matière de baux et loyers, par arrêt du 8 novembre 1999, a confirmé le jugement attaqué avec suite de frais. La cour cantonale a constaté que la bailleresse avait été dûment invitée à produire des pièces en vue d'établir le loyer usuel et que les pièces produites, soigneusement examinées, ne permettaient pas de montrer - compte tenu des exigences de la jurisprudence - quel était le niveau du loyer usuel. C.- La bailleresse recourt en réforme au Tribunal fédéral. Invoquant une violation des art. 8 CC, 274d al. 3 et 269a CO, elle conclut à l'annulation de l'arrêt attaqué et au renvoi de la cause à l'autorité cantonale pour nouvelle décision. Les intimés proposent la confirmation de l'arrêt cantonal. 