Using numpy's array.reshape and str.ljust:
import numpy as np
mystring = "aaa bb cccc d eee"
n_rows, n_columns = (5, 4)
table = np.array(list(mystring.ljust(n_rows*n_columns))).reshape(n_rows, n_columns)
print(table)
# [['a' 'a' 'a' ' ']
# ['b' 'b' ' ' 'c']
# ['c' 'c' 'c' ' ']
# ['d' ' ' 'e' 'e']
# ['e' ' ' ' ' ' ']]
Using more_itertools' grouper, ignoring the number of rows and assuming there is less than one full row of spaces to add:
from more_itertools import grouper
mystring = "aaa bb cccc d eee"
n_columns = 4
table = list(grouper(mystring, n_columns, fillvalue=' '))
print(table)
# [('a', 'a', 'a', ' '),
# ('b', 'b', ' ', 'c'),
# ('c', 'c', 'c', ' '),
# ('d', ' ', 'e', 'e'),
# ('e', ' ', ' ', ' ')]
Using more_itertools' chunked with str.ljust:
from more_itertools import chunked
mystring = "aaa bb cccc d eee"
n_rows, n_columns = 6, 4
table = list(chunked(mystring.ljust(n_rows*n_columns), n_columns))
print(table)
# [['a', 'a', 'a', ' '],
# ['b', 'b', ' ', 'c'],
# ['c', 'c', 'c', ' '],
# ['d', ' ', 'e', 'e'],
# ['e', ' ', ' ', ' '],
# [' ', ' ', ' ', ' ']]