I would use .from_items :
pd.DataFrame.from_items(zip(names, data))
which gives
data1 data2 data3 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9
It should also be faster than transpose:
%timeit pd.DataFrame.from_items(zip(names, data))
1000 loops, best of 3: 281 μs per loop
%timeit pd.DataFrame(data, index=names).T
1000 loops, best of 3: 730 μs per loop
Adding a fourth column is also quite simple:
df['data4'] = range(1, 11)
which gives
data1 data2 data3 data4 0 0 0 0 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 6 6 6 7 7 7 7 7 8 8 8 8 8 9 9 9 9 9 10
EDIT:
As @jezrael mentioned, the third option would be (be careful: order is not guaranteed)
pd.DataFrame(dict(zip(names, data)), columns=names)
Dates:
%timeit pd.DataFrame(dict(zip(names, data)))
1000 loops, best of 3: 281 μs per loop