Swiatek, who was one of the favourites when she lost to eventual champion Zheng in the Paris semi-finals last year, converted all five of her break-point chances during a 94-minute match that was interrupted multiple times to dry the court.
"At the end it got really windy which made it super tricky especially when the conditions change during the match you need to adjust quickly and it's not that easy," Swiatek said in her on-court interview.
"I am happy that I was pushing until the end. It was a weird match with all the breaks and everything but I wanted to be composed and really focused and I'm glad that I did that."
The Polish second seed came back from 0-40 down to break for a second time and a 5-1 lead in the first set, but Zheng broke right back before Swiatek finally closed out the frame on her next service game.
In the second frame Swiatek again came back from 0-40 down to break for a 1-0 lead and didn't drop a point over the next two games before building a commanding 4-0 lead and holding off a late-set resurgence by Zheng.
With the win, Swiatek improved her head-to-head record against Zheng to 7-1.
Up next for reigning Indian Wells champion Swiatek, who has dropped 12 games across her four matches here, will be ninth seed Mirra Andreeva.
The 17-year-old Russian sensation continued her good form by beating Ukrainian Elina Svitolina 7-5 6-3 to earn another outing against Swiatek whom she beat on her way to winning her first WTA 1000 title.
In the other quarter-finals, Madison Keys extended her winning streak to 16 matches with a 6-1 6-1 wipeout of wild-card entry Belinda Bencic.
The Australian Open champion needed just 65 minutes to hold up her end of a rematch with top-seeded Aryna Sabalenka, who beat Liudmila Samsonova 6-2 6-3 later.
Keys beat Sabalenka in three sets in January at Melbourne Park, denying Sabalenka a third consecutive title.
Bencic was coming off an upset of No.4 seed Coco Gauff in the fourth round, but the 28-year-old from Switzerland never had a chance against the fifth-seeded Keys.