It is possible Hamlet is too much of a thinker and not enough of an actor. He does have an almost excessive desire to reason everything through thoroughly. In normal situations, as well as in a crisis, this can be an extremely valuable asset and a positive character trait.
I'd suggest that Hamlet has specific reasons throughout much of the play for waiting. At first, he isn't sure of the Ghost's identity. He worries that the ghost could be a demon in disguise trying to get him to kill an innocent king. He uses the play within the play to determine whether or not Claudius is guilty.
Then he finds Claudius at prayer and seems ready to kill him, but stops because, since Claudius is praying Hamlet assumes Claudius is confessing, and his death would send him to heaven. Hamlet doesn't want to send Claudius to heaven.
Of course, when Hamlet neglects to kill Claudius while he is praying he is, in a sense, playing God, and this is a real mistake (probably the climax of the play). Hamlet is also mistaken: Claudius never actually confesses and repents and his soul would still be damned, according to the beliefs of the day and play.
But these two instances show that at least some of the time, Hamlet has specific reasons to not kill Claudius. There's nothing wrong with a mind that doesn't want to kill an innocent man.