Changing numbers inside list to a list

If[NumberQ[N[#]], {#, 0}, #] & /@ a

or

Replace[a, {b_ :> If[NumberQ[N[b]], {b, 0}, b]}, 1]

or

Replace[a, {b_ :> {b, 0} /; NumberQ[N[b]]}, 1]

or

a /. {{a_, b_} :> {a, b}, b_ :> {b, 0} /; NumberQ[N[b]]}

or the above with Element[b_,Complexes] i.e.

a /. {{a_, b_} :> {a, b}, b_ :> {b, 0} /; Element[b, Complexes]}

or

If[Element[#, Complexes] && !ListQ[#], {#, 0}, #] & /@ a

or

Replace[a, {b_ :> {b, 0} /; !ListQ[b] && Element[b, Complexes]}, 1]

etc.


Update: Based on Alucard's nice comment. If and only if elements strictly numbers or lists:

Flatten@*List/@a//PadRight



Update${}^{\mathbf 2}$: TIL: Besides brevity, Mr.Wizard's suggestion NumericQ definitely more efficient than NumberQ@*N.

Relatively inconsequential for simple numbers, but you can get creative:

someNumber = 
  Total[Table[(\[Pi] + I + GoldenAngle)^
      RandomInteger[{4, 
        1000}]/((\[Pi] - GoldenAngle + Exp[ I GoldenAngle])^
        RandomInteger[{4, 1000}] + (\[Pi] + GoldenAngle + 
          Exp[ I GoldenAngle])^RandomInteger[{4, 1000}]), {600}]];

RepeatedTiming[someNumber // N // NumberQ]

{0.01, True}

RepeatedTiming[NumericQ@someNumber]

{$2.3 \times 10^{-7}$, True}


Maybe this can help

PadRight[Charting`padList /@ a]

{{1,0},{π,0},{2+3 I,0},{1,2},{3,4},{-2,0}}


Transpose@Thread[PadRight[Flatten@*List /@ a]]