Olá Thiago.
Só um ponto antes de explicar os erros que você mencionou.
Na verdade, data é um dicionário, veja:
data = {'Linha' + str(i): i + 1 for i in range(5)}
Ele seria um DataFrame se você fizesse o seguinte:
data = pd.DataFrame({'Linha' + str(i): i + 1 for i in range(5)}, index = index)
Pois bem, seus dois códigos geram respectivamente uma lista e um dicionário, mediante a utilização de um list comprehension e dict comprehension
Essas duas formas de criar listas e dicionários em python deve seguir a seguinte estrutura
Para listas:
[item da iteracao for item da iteracao in lista com os valores que serao iterados ]
Exemplo
[i for i in range(5)]
Para dicionários:
{chave da linha : lista ou valor ]
Exemplo
{'indice' : [i for i in range(5)] }
Sendo assim, se você alterar essas estruturas, um erro será gerado. Logo, por isso que você acaba verificando um erro, porque você acaba alterando a estruturas dos geradores.
Abs