When he saw that 90 mph sinker barreling his way, he knew just what to do with it.
"I went out today with a plan and I was expecting that pitch," he said. "He threw it and I hit it really good."
The win is the fourth straight for the Astros and the second consecutive loss for the National League Central-leading Cardinals.
The game was tied at 2-2 before Altuve's shot, which a fan in the top row of the Crawford Boxes in left field caught, to give Houston a 5-2 lead.
"He has a nice short swing, and he's not missing too many pitches that catch too much of the plate, and he did it again tonight," St. Louis manager Mike Matheny said.
It was another good night for Altuve, who is among the top batters in the NL with a .360 average this season and whose 14 multihit games lead the NL.
It is the fifth straight game where the Astros have had at least one homer, which is their longest streak since also homering in five in row from last May 29 to June 2.
Houston starter Lucas Harrell (2-2) gave up seven hits and four runs in 5 1/3 innings. Closer Brett Myers allowed one hit in a scoreless ninth for his seventh save after three other relievers combined to pitch 2 2/3 scoreless innings.
Lohse (4-1), who started the season 4-0 for the first time in his career, had his worst outing of the season. He allowed seven hits and five runs -- both season highs -- in a season-low five innings. Three of his runs were earned; the others came because of two errors by the Cardinals.
"He had trouble getting the ball down," Matheny said. "He got balls in the air. This was a day that he just didn't have that down bite. When he is up in the zone, it is going to be a tough day for him."
Lohse was unable to build on the success he had last season against the Astros when he was 2-0.
Jordan Schafer reached in the first inning on a fielding error by Matt Carpenter. Altuve followed with a single and the pair advanced on a double steal. A single by Carlos Lee scored Schafer before Jed Lowrie's single sent Altuve home to make it 2-1.
The miscues continued in the bottom of the second when Schafer reached on an error by Craig, the first baseman, after a single by Harrell. That set up Altuve's home run.
Carpenter walked with one out in the second inning and later scored on a balk by Harrell to tie it at 2-2.
Jon Jay singled and scored on a triple by Matt Holliday that landed near the bullpen in right center to get St. Louis within 5-3 in the third inning. Harrell was a bit shaken up after landing hard on his chest after diving to try and grab the hit by Jay. He was looked at by trainers and remained in the game.
Holliday scored on a sacrifice fly by Craig to cut the lead to 5-4.
"I thought I was good at the beginning of the game and then the balk really hurt me," Harrell said. "Then in the third when the wind got knocked out of me, I didn't take enough time and when I got back up on the mound I kind of rushed and I should have taken a little bit more time."
The Astros had a chance to add to their lead in the seventh inning after Brian Bogusevic walked after a two-out double by Lowrie. But Johnson grounded out to end the threat.
Schafer walked with two outs in the eighth inning. He has reached base safely in each of the 25 games he's played this season -- tying the longest streak to start a season in franchise history. Denis Menke also reached the mark for the Astros in 1969.
He stole second base for his 11th steal of the season before a fly out by Altuve ended the inning.
St. Louis OF Carlos Beltran wasn't in the lineup Friday because of soreness in his right leg, but he pinch hit in the eighth inning. Matheny expects him to be back in the lineup on Saturday. ... Lance Berkman, on the 15-day disabled list with a pulled left calf, experienced some discomfort when he ran on Friday. Matheny said they'll let him rest on Saturday and possible try it again on Sunday to see if he feels better. ... Houston wore the shooting star jerseys the original Astros team wore in 1965 as they continued the celebration of the 50th anniversary of the franchise. Rusty Staub, who played for the Astros in 1965, threw out the first pitch.