He smashed a grand slam in the fifth inning and a three-run blast in the seventh, raising his batting average to .429.
Joe Thurston, David Frese, Rick Ankiel and Skip Schumaker each had one RBI. Thurston and Ankiel both had three hits, and like Pujols, Schumaker and Colby Rasmus had two hits for the Cardinals, who split a four-game home series with Pittsburgh to open the season.
Starter Adam Wainwright (1-0) yielded four hits in five scoreless innings before yielding to relievers Jason Motte, Dannys Reyes and Brad Thompson.
Houston scored its runs against Thompson in the top of the ninth on Michael Bourn's triple and Jason Smith's sacrifice fly.
Hunter Pence had two of the seven hits for the Astros, who have lost four of five.
The losing pitcher was starter Roy Oswalt (0-2).