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 either ninth seed Mirra Andreeva or Ukrainian Elina Svitolina.
In the day's other women's quarter-finals, top seed Aryna Sabalenka will kick off the evening session against Liudmila Samsonova with the winner facing either Swiss wildcard Belinda Bencic or Australian Open champion Madison Keys.