Qual é a melhor maneira de criar um quadro de dados pandas preenchido com zero de um determinado tamanho?
Eu tenho usado:
zero_data = np.zeros(shape=(len(data),len(feature_list)))
d = pd.DataFrame(zero_data, columns=feature_list)
Há uma melhor forma de fazê-lo?
data
? Por que você precisa criar outra estrutura para segurá-lo?Respostas:
Você pode tentar isto:
fonte
%timeit temp = np.zeros((10, 11)); d = pd.DataFrame(temp, columns = ['col1', 'col2',...'col11'])
leva 156 nós. Mas%timeit d = pd.DataFrame(0, index = np.arange(10), columns = ['col1', 'col2',...'col11'])
leva 171 nós. Estou surpreso que não seja mais rápido.d.set_value(params)
depois de inicializard
para conter 0's. Um reparo fácil é:d = pd.DataFrame(0.0, index=np.arange(len(data)), columns=feature_list)
.É melhor fazer isso com numpy, na minha opinião
fonte
TypeError: 'numpy.float64' object does not support item assignment
np.float64
Semelhante a @Shravan, mas sem o uso de numpy:
Então você pode fazer o que quiser com ele:
fonte
Se quiser que o novo quadro de dados tenha o mesmo índice e colunas de um quadro de dados existente, basta multiplicar o quadro de dados existente por zero:
fonte
Se você já tem um dataframe, esta é a maneira mais rápida:
Comparado a:
fonte
Supondo que haja um modelo de DataFrame, qual gostaria de copiar com valores zero preenchidos aqui ...
Se você não tem NaNs em seu conjunto de dados, multiplicar por zero pode ser significativamente mais rápido:
A melhoria depende do tamanho do DataFrame, mas nunca o achei mais lento.
E só pra cacete:
Mas:
EDITAR!!!
Supondo que você tenha um quadro usando float64, este será o mais rápido por uma margem enorme! Ele também é capaz de gerar qualquer valor, substituindo 0,0 para o número de preenchimento desejado.
Dependendo do gosto, pode-se definir nan externamente e fazer uma solução geral, independentemente do tipo de flutuador particular:
fonte