Faits :
A.
C._ SA et D._ étaient locataires d'une arcade et d'un dépôt destinés à l'exploitation d'un café-bar, situés à Genève. La bailleresse était alors la SI E._, dont les actifs et les passifs seront repris ensuite par D._ AG. Les baux avaient été conclus pour une durée fixe de dix ans à partir du 1er novembre 2001 et venaient à échéance sans résiliation le 31 octobre 2011. Les locataires avaient le droit de prolonger les baux une fois pour une durée de cinq ans jusqu'au 31 octobre 2016; l'option s'éteignait en cas de sous-location ou de cession des baux. Les loyers annuels s'élevaient à 16'380 fr. et 2'400 fr.
Par contrat du 4 mars 2005, les locataires ont vendu le fonds de commerce, incluant l'enseigne, le mobilier, le matériel d'exploitation et la clientèle, pour 50'000 fr. à A._, née en 1956. Ils ont en outre sollicité le transfert des baux en faveur de A._ ou la conclusion de nouveaux contrats avec cette dernière. Par contrat du 21 avril 2005 conclu entre la bailleresse, les locataires et A._, les baux ont été transférés à cette dernière; il y était précisé que les baux signés le 20 septembre 2001 pour une durée de dix ans se terminaient le 1er octobre 2001 (sic).
B.
Le 31 août 2011, A._ a déposé une requête auprès de la Commission de conciliation en matière de baux et loyers, concluant principalement à ce qu'il soit constaté que les baux étaient de durée indéterminée, subsidiairement à ce qu'une prolongation de six ans lui soit accordée avec autorisation à se départir des contrats en tout temps moyennant un préavis de trente jours. Par pli du 1er novembre 2011, la bailleresse a rappelé à la locataire que les baux avaient pris fin et que tout versement de sa part serait considéré comme indemnité pour occupation illégale. La cause a été déclarée non conciliée le 16 novembre 2012.
Le 21 novembre 2012, A._ a saisi le Tribunal des baux et loyers du canton de Genève. Par jugement du 17 mars 2014, le tribunal a constaté que les baux étaient de durée déterminée et qu'ils étaient arrivés à échéance le 31 octobre 2011; il a accordé une unique prolongation de trois ans, la locataire étant autorisée à résilier les baux en tout temps moyennant un préavis de trente jours.
La locataire a interjeté appel. En cours de procédure, les actifs et passifs de la société bailleresse ont été repris par B._ AG. Par arrêt du 26 janvier 2015, la Chambre des baux et loyers de la Cour de justice du canton de Genève a confirmé l'échéance des baux au 31 octobre 2011. Elle a réformé le jugement de première instance en ce sens qu'une prolongation unique de trois ans et demi, échéant le 30 avril 2015, était accordée à la locataire.
C.
A._ interjette un recours en matière civile, concluant à une unique prolongation de bail de six ans échéant au 31 octobre 2017.
B._ AG propose le rejet du recours en tant qu'il est recevable.
Les parties ont chacune déposé une seconde écriture.
Par ordonnance du 20 mai 2015, la Présidente de la cour de céans a accordé l'effet suspensif requis par la recourante.

Considérant en droit :
1.
Le recours est dirigé contre un arrêt final (<ref-law>) rendu en matière civile (<ref-law>) par un tribunal supérieur d'un canton, qui a statué sur recours (<ref-law>). Lorsque la contestation porte sur la prolongation du bail, la valeur litigieuse correspond au loyer de la date de la décision attaquée jusqu'au terme de la prolongation demandée (<ref-ruling> consid. 1 p. 407); dans le cas particulier, elle atteint manifestement le minimum légal de 15'000 fr. prévu en matière de droit du bail à loyer (<ref-law>).
Au surplus, le recours est exercé par la partie qui a succombé dans sa conclusion tendant à prolonger le bail de six ans et qui a donc qualité pour recourir (<ref-law>). Déposé dans le délai (art. 45 al. 1 et art. 100 al. 1 LTF) et la forme (<ref-law>) prévus par la loi, le recours est en principe recevable.
2.
La recourante se plaint d'une violation de l'<ref-law> en lien avec l'interdiction de l'arbitraire. Le Tribunal fédéral examinera l'unique grief soulevé dans le recours sur la base des faits établis par l'autorité précédente (<ref-law>).
2.1. Le locataire peut demander la prolongation d'un bail de locaux commerciaux pour une durée de six ans au maximum, lorsque la fin du contrat aurait pour lui des conséquences pénibles sans que les intérêts du bailleur le justifient (art. 272 al. 1 et <ref-law>). Pour déterminer, dans les limites légales, la durée de la prolongation du bail, le juge doit procéder à une pesée des intérêts en présence, en tenant compte de toutes les circonstances pertinentes (<ref-law>). Le juge apprécie librement, selon les règles du droit et de l'équité (<ref-law>), s'il y a lieu de prolonger le bail et, dans l'affirmative, pour quelle durée. Il doit procéder à la pesée des intérêts en présence et tenir compte du but d'une prolongation, qui est de donner du temps au locataire pour trouver des locaux de remplacement, et non de maintenir le plus longtemps possible une situation profitable (<ref-ruling> consid. 3b p. 448; David Lachat, Le bail à loyer, 2008, p. 765; Peter Higi, Zürcher Kommentar, 4e éd. 1996, n° 86 ad <ref-law>). Il incombe au juge de prendre en considération tous les éléments du cas particulier, tels que la durée du bail, la situation personnelle et financière de chaque partie, leur comportement, de même que la situation sur le marché locatif. Le juge peut tenir compte du délai qui s'est écoulé entre le moment de la résiliation et celui où elle devait prendre effet ou du fait que le locataire n'a pas entrepris de démarches sérieuses pour trouver une solution de remplacement (<ref-ruling> consid. 4c p. 230 s.; arrêt 4C.425/2004 du 9 mars 2005 consid. 3.4, in SJ 2005 I p. 397) ou encore du besoin plus ou moins urgent du bailleur de voir partir le locataire (<ref-ruling> consid. 6 p. 196). Il est concevable d'accorder une prolongation d'un bail commercial au locataire qui n'entend pas poursuivre son activité ailleurs, afin qu'il trouve une solution lui permettant de remettre le commerce à un tiers dans de bonnes conditions (cf. Lachat, op. cit., p. 773). Mais si le locataire, à ses risques et périls, a procédé à des investissements, la perte de la possibilité de les amortir n'est pas constitutive de conséquences pénibles (Peter R. Burkhalter/Emmanuelle Martinez-Favre, Le droit suisse du bail à loyer, 2011, adaptation française de la 3e éd. du SVIT Kommentar de Raymond Bisang et al., n. 28 et n. 43 ad <ref-law>, p. 698 et p. 703).
Le Tribunal fédéral examine librement l'application du droit fédéral et, en particulier, de l'<ref-law>. Cependant, le juge ne transgresse pas le droit fédéral en exerçant le pouvoir d'appréciation que la loi lui accorde. Le Tribunal fédéral ne revoit dès lors qu'avec réserve la décision d'équité prise en dernière instance cantonale. Il intervient lorsque l'autorité précédente s'écarte sans raison des règles établies par la doctrine et la jurisprudence en matière de libre appréciation, ou lorsqu'elle s'appuie sur des faits qui, dans le cas particulier, ne devaient jouer aucun rôle, ou encore lorsqu'elle ignore des éléments qui auraient absolument dû être pris en considération. En outre, le Tribunal fédéral redresse les décisions rendues en vertu d'un pouvoir d'appréciation lorsqu'elles aboutissent à un résultat manifestement injuste ou à une iniquité choquante (<ref-ruling> consid. 2 p. 123 s.).
2.2. En l'espèce, la recourante avance différents éléments qui justifient à ses yeux l'octroi de la prolongation de bail maximale de six ans.
Elle allègue tout d'abord avoir cru que les baux étaient de durée indéterminée et avoir investi toutes ses économies dans le café-bar. Mais comme elle l'a admis elle-même devant le juge de première instance, la locataire a fait confiance à son agent d'affaires et n'a lu ni le contrat de bail qu'elle reprenait, ni l'acte de transfert. Elle a ainsi fait preuve d'une légèreté manifeste, même de la part d'une personne peut-être peu aguerrie aux affaires. La recourante ne saurait s'en prévaloir face à la bailleresse, qui n'a eu aucune part sur sa perception des choses et sa décision d'investir.
Par ailleurs, la recourante fait valoir qu'elle ne peut pas reprendre d'autre établissement faute de moyens suffisants et qu'il ne lui est pas possible de trouver un emploi en raison de son âge. L'autorité précédente n'a pas ignoré ces circonstances. Elle a retenu qu'une prolongation de trois ans et demi devait permettre à la locataire de remettre son fonds de commerce au meilleur prix et que même une prolongation de six ans ne suffirait pas pour exploiter l'établissement jusqu'à ce que la locataire atteigne l'âge ordinaire de la retraite. Cela étant, il convient de relever que la recourante a repris, à l'âge de 49 ans, des contrats de durée déterminée venant à échéance six ans plus tard, soit lorsqu'elle aurait 55 ans. Il était ainsi d'emblée prévisible pour la locataire que l'exploitation du café-bar pouvait prendre fin avant l'âge de la retraite.
Selon la recourante, elle ne dispose en outre pas de suffisamment de temps pour s'organiser et trouver de l'aide. A cet égard, une prolongation de trois ans et demi après l'échéance des baux lui laissait largement le temps pour prendre des dispositions. Dès lors que le texte des contrats n'offrait guère de doute quant à l'échéance des baux au 31 octobre 2011, la prudence élémentaire eût voulu que la locataire agisse au plus tard au moment où elle a eu connaissance du fait que les baux étaient de durée déterminée. Si elle n'a rien fait dans l'attente de la décision judiciaire de dernière instance, la recourante ne saurait en tirer avantage.
La locataire soutient enfin que la bailleresse n'invoque pas de besoin urgent. La cour cantonale a relevé ce fait et en a tenu compte pour accorder une prolongation des baux. En soi, cette circonstance n'implique toutefois pas un droit à une prolongation pour la durée légale maximale. Ce d'autant moins qu'il y a eu des plaintes au sujet du bruit et du comportement de certains clients de l'établissement tenu par la recourante.
En résumé, on ne discerne pas d'éléments importants que l'instance précédente aurait omis de prendre en considération. En tout état de cause, le fait que la recourante ait, peu avant l'échéance du contrat, transigé sur une question de frais de chauffage, est dénué de pertinence. Eu égard au large pouvoir d'appréciation du juge en la matière, l'octroi d'une prolongation unique de trois ans et demi est conforme au droit fédéral dans les circonstances de l'espèce.
Le grief tiré d'une violation de l'<ref-law> se révèle mal fondé de sorte que le recours sera rejeté.
3.
La recourante, qui succombe, prendra à sa charge les frais judiciaires (<ref-law>) et versera des dépens à l'intimée (art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 2'500 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Chambre des baux et loyers de la Cour de justice du canton de Genève.
Lausanne, le 10 juillet 2015
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann