The defending champion Federer will next meet Croatia's Borna Coric in a rematch of their BNP Paribas Open semi-final, which Federer won in three sets. He squandered a first break point by firing a forehand into the net, but claimed the advantage on his second chance when his opponent shanked an very bad forehand long.
Zverev, who improved to 4-0 against Edmund, saved the one break point he faced and took advantage of the two break points he earned.
The 13th-seeded Coric closed the match out with a clean forehand passing shot to claim his spot in Sunday's final.
Coric, who is 2-2 against Federer, also beat the 20-time Grand Slam champion in their last outing at Halle in June. "I was telling myself, particularly tonight I can not do this (lose) because they were there, but I don't know how much I draw from that, quite honestly".
But he put Nishikori under the cosh immediately, breaking the eighth seed in the first game of both sets, though the Japanese did well to recover and force a second-set tie break.
Zverev, who qualified for the ATP Finals with his quarter-final win over Kyle Edmund, was unable to stem the tide and his frustration got the better of him after he was broken again early in the second set. Zverev looked clueless out on the court, and soon faltered away as Djokovic broke serve for the fourth time in the match.
But even in defeat, both Federer and Zverev have qualified for the season-ending ATP Finals, featuring the world's top eight players on November 11 in London. "He had a lot more chances than me".
"I did everything I meant to do on my end", the 31-year-old Serb, chasing his 32nd Masters title, said.
The 31-year-old says he is back close to the kind of blistering form that has brought him 14 Grand Slams.
"It's always easier to get there - but then staying there is always the tougher part".