They took a 16th minute lead through Sean Maguire's first goal since December but Famara Diedhiou pulled the Robins level two minutes into the second half.
PNE's goal was class in both the build-up and finish, Daniel Johnson setting it up with a cheeky back heel which nutmegged a defender to send Maguire clear in the box.
His finish had an element of cheek about it, with him dummying the keeper before finding the net.
The visitors had chances to extend that lead, Paul Gallagher seeing a shot hit the bar, while Maguire forced a good save from Dan Bentley.
So it was with a big dose of frustration that some slack defending let in City for Diedhiou for the equaliser.
The draw saw North End finish the campaign in ninth place, disappointing bearing in mind they were top for a spell in November and were in the top six for much of the season.
North End's starting XI had shown just the one change from Saturday's win over Birmingham, Maguire replacing Jayden Stockley.
On the bench there was a place for midfielder Tom Bayliss at the expense of David Nugent who dropped out of the squad.
It was the home side who had the game's first chance inside the second minute, Ryan Ledson's pass intercepted in midfield and allowing Nahki Wells to break.
He was brought down by Patrick Bauer a couple of yards outside the box, Jamie Paterson seeing the resulting free-kick tipped over the bar by Declan Rudd diving to his left.
North End soon got themselves a foothold in the game, their passing crisp and movement good.
Brad Potts had a shot from 20 yards gathered by Robins keeper Dan Bentley, then Andrew Hughes arrived late in the box to meet a cross from Gallagher but steered a header wide.
PNE took the lead in some style, Gallagher's ball in from the left finding Johnson in the box.
With his back to goal, Johnson stepped towards the edge of the box and then played the cheekiest of back heels through a defender's legs to release Maguire behind the home defence.
Maguire showed a cool head as he took a touch, sold a dummy to the keeper before lifting a nice finish past Bentley into the net.
It was almost 2-0 five minutes later, Maguire's lay-off finding Gallagher who saw a first-time shot with his left-foot from outside the box thud against the bar.
Ledson sprayed a pass from midfield down the right channel to pick out the run of Potts, the midfielder moving in field but pulling a shot wide of the near post.
Rudd was relatively untroubled by a Wells shot which was poked straight at him, Andreas Weimann's knock down having picked out the striker in the box.
In the run-up to half-time, another lovely piece of footwork and pass from Johnson found Maguire inside the box, the Irishman's low angled shot parried low down by Bentley.
The rebound looked to be running into Potts' path before a defender cleared at the expense of a corner.
North End were caught cold by a Robins equaliser less than three minutes into the second half.
Wiemann got the ball down the right hand side of the box and sent over a low cross which Joe Rafferty misjudged as he attempted to clear and Diedhiou side-footed home from close range.
City should have scored again three minutes later as Diedhiou's pass inside found Wells in the box but he scooped a first-time shot into the gloves of Rudd.
PNE responded with Maguire seeing a shot deflected behind after he had taken the ball across the face of the box with little in the way of support for a pass.
More inventive play from Johnson saw him set up Gallagher 25 yards out, the midfielder's shot tipped over by Bentley.
The flurry of early second-half chances continued with Maguire going on a jinking run which took him into the box but with Potts on for a pass to the right of him, the striker opted to shoot and saw his effort blocked.
A double substitution in the 64th minute saw PNE change formation, Alan Browne and Tom Barkhuizen replacing Ledson and Josh Harrop.
They switched to a 3-5-2, Browne playing at right wing-back and Rafferty moving to the left - either side of Jordan Storey, Bauer and Hughes in the middle.
Barkhuizen went up front to give Maguire some company, that partnership fairly short-lived with Stockley coming on for Maguire 10 minutes later.
There then came a first Championship appearance in a Preston shirt for Bayliss, with last summer's signing from Coventry taking over from Gallagher for the final quarter of an hour.
With five minutes left, Barkhuizen saw a shot blocked for a corner, Rafferty's flag kick met in the air by Stockley who headed over.
Potts tried his luck with a shot from 20 yards which only just cleared the bar, PNE having broken on the counter-attack.
Barkhuizen blazed a late chance over the bar, while deep in stoppage-time, Rudd saved well from City substitute Benik Afobe.
Bristol City: Bentley, Vyner, Kalas, Williams, Pereira (Benkovic 64), Nagy, Wiemann, Paterson (Afobe 81), Wells (Palmer 71), Diedhiou. Subs (not used): O'Dowda, Watkins, Eliasson, Rowe, Massengo, Wollacott.
PNE: Rudd, Rafferty, Bauer, Storey, Hughes, Ledson (Browne 64), Gallagher (Bayliss 75), Potts, Johnson, Harrop (Barkhuizen 64), Maguire (Stockley 74). Subs (not used): Fisher, Huntington, Bodin, Sinclair, Hudson.
Referee: Andy Woolmer (Northamptonshire)