The Cardinals took two of three from the Cubs. Chicago has lost three of four overall.
Carpenter hit a two-run single in the second inning and added a sacrifice fly in the fourth that put St. Louis ahead to stay at 4-3.
Wacha allowed three runs and five hits in 6 1-3 innings. He gave up a two-run homer to Anthony Rizzo on his 16th pitch of the game.
Trevor Rosenthal gave up a run in the ninth, but retired Luis Valbuena and Emilio Bonifacio with the trying runs on base to pick up his fourth save in as many opportunities.
Edwin Jackson allowed four runs and eight hits in six innings.