HOUSTON -- Dallas Keuchel threw six scoreless innings with nothing to show for it, the Astros loaded the bases twice with fewer than two outs and couldn't score, and Alex Bregman hit a fly ball that was headed over the right-field wall before Royals outfielder Rosell Herrera brought it back.
It was that kind of frustrating Friday night for the Astros, who saw reliever Ken Giles give up a go-ahead triple in the ninth inning to Herrera to allow the Royals to snap a nine-game losing streak with a 1-0 win at Minute Maid Park.
"I just didn't execute my pitches," Giles said. "Just wasn't my day. I have to shake it off and be ready tomorrow."
With the game scoreless heading to the ninth, Giles gave up a single to nine-hole hitter Raul Mondesi, who stole second and scored on the one-out triple by Herrera. An inning earlier, Herrera had robbed Bregman of a home run.
"First pitch leaked to Mondesi and he gets the leadoff runner on," Astros manager AJ Hinch said. "And once that happens, that's probably the worst-case scenario for us with that kind of pressure at the very beginning of the inning."
The Astros, who had just two hits and walked five times, were 0-for-9 with runners in scoring position and stranded nine men on base. They grounded into three double plays, giving them a Major League-high 74 this season.
"Yeah, it's unusual because we've been pretty good swinging the bat lately," Hinch said. "It seemed like every opportunity ended in a double play tonight. I know there were more than that. Only to get a couple of hits -- one early and one late, and mix in a few walks -- it was a quiet night offensively for us. It felt like we had enough guys on base at some point to do something, but not tonight."
Keuchel held the Royals without an earned run in six innings for the second consecutive start, allowing six hits. Keuchel, who got his ERA under 4.00 (3.90), gave up a pair of base runners after two innings three times and worked out of it.
"Yeah, that was a tough one to lose," Keuchel said. "We could tell early on that [Royals starter Danny Duffy] was on his game. He's tough. I know he hasn't had the season he's wanted to have so far, but any given start, he's as tough as they come in this league."
Duffy also threw six scoreless, allowing four walks and two singles. He was bolstered by a pair of key double plays -- Evan Gattis with runners at first and second and none out in the second inning, and Yuli Gurriel with the bases loaded and one out to end the sixth.
The Astros hit into another bases-loaded double play to end the seventh with Kevin McCarthy on the mound. McCarthy walked Gattis and Marwin Gonzalez to open the inning, and Tyler White reached on a fielder's choice with one out before George Springer grounded into a 4-6-3 double play.
MOMENT THAT MATTERED
Bregman nearly broke up the shutout when he hit a rocket to right field to start the eighth off Justin Grimm. The ball traveled a projected 368 feet and took Herrera back to the wall, where he jumped and caught it before it went over the yellow line.
"As he was tracking back there, I even thought he thought it was behind him when he first took off," Hinch said. "When he closed the gap and jumped, I couldn't tell if it was going to be high enough. He's a pretty rangy guy. Herrera's a big guy, and tall. Just enough hops to make a great catch."
Herrera's catch to rob Bregman of a homer capped an 0-for-4 night that snapped his 31-game on-base streak, which is the second-longest streak by a player in the big leagues this season.
HE SAID IT
"I'm really grinding out there and trying to fine-tune things. No excuses. I've just got to be ready. I've got to grind through it. I'm going to get through these hard times. It's just a matter of time and when." -- Giles, who has allowed 11 earned runs and 15 hits in 5 1/3 innings in losses this year
Astros right-hander Lance McCullers (8-3, 3.77 ERA) gets the start at 6:15 p.m. CT on Saturday against the Royals at Minute Maid Park on FOX. McCullers is facing Kansas City for the second start in a row, having allowed two earned runs and striking out nine batters in six innings on Sunday at Kauffman Stadium. Righty Ian Kennedy (1-7, 5.31) will start for the Royals.