es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener solo una columna de un dataframe de Pandas (sin índice) y ponerlo en un deque?

Tengo un archivo .csv de diferentes empresas en la siguiente forma:

Fecha (Clave) Empresa 1 Empresa 2 Empresa n
01.01.2020 2 11 3
02.01.2020 3 9 45
01.11.2021 1 12 34

Guardé los nombres de las empresas en un archivo de ticker. Mi objetivo ahora es cargar este conjunto de datos en un deque de la siguiente forma:

[[Empresa 1] [2 3 … 1] [Empresa 2] [11 0 … 12] … [Empresa n] [3 45 … 34]]

con el siguiente código:

import pandas as pd
import pickle

from collections import deque

with open(“Webscrapper/Sp500tickers.pickle”, ‘rb’) as f:
tickers = pickle.load(f)

df = pd.read_csv(f”Webscrapper/Sp500tickers_DailyChanges.csv”, index_col=”Date”)

data = [[ticker, df[ticker][0:-1]] for ticker in tickers]
c = deque(data)
print(c)

También obtengo las fechas, lo que significa que tengo una matriz de la siguiente forma:

[[Empresa 1] [Fecha Empresa 1 01.01.2020 2 02.01.2020 2 3 … 01.11.2021 1] [Empresa 2] [Fecha Empresa 2 01.01.2020 11 02.01.2020 0 … 01.11.2021 12] … [Empresa n] [Fecha Empresa n 01.01.2020 3 02.01.2020 45 … 01.11.2021 34]]

¿Cómo puedo convertir la matriz en la forma deseada?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar la función zip para convertir el array en la forma deseada. La función zip toma dos o más iterables y devuelve un iterador de tuplas. Cada tupla contiene los elementos en esa posición de todos los iterables.

    Por ejemplo, si tiene dos listas a = [1, 2, 3] y b = [4, 5, 6], entonces zip(a, b) devolverá [(1, 4), (2, 5), (3, 6)].

    En su caso, puede utilizar zip para combinar el nombre de la compañía y los valores correspondientes en una sola tupla. Luego, puede utilizar una comprensión de lista para crear la deque deseada. El código se vería algo así:

    data = [[ticker, list(zip(df.index, df[ticker][0:-1]))] for ticker in tickers]
    c = deque(data)
    print(c)
    

Comments are closed.