Police said the bus, which had at least 70 people on board, was destroyed, CNN reported.
The passengers were employees of several governmental departments in Peshawar, capital of the volatile Khyber Pakhtunkhwa province, officials said.
Police believe the blast was triggered remotely by a device in a can holding between 13 and 18 pounds of explosives and planted on the bus, said Nasir Durrani, the province's inspector general of police.
No group immediately claimed responsibility for the attack.
Hakim Khan, a witness, told CNN the explosion tossed people sitting on the bus's roof into nearby fields.
Selena Gomez drops F-bomb, walks off stage during Jingle Ball performance
Exploding whale video goes viral on Internet