python pandas mat

python - Pandas: Creando DataFrame desde Series



mat (3)

Aquí es cómo crear un DataFrame donde cada serie es una fila .

Para una sola serie (que resulta en un DataFrame de una sola fila):

series = pd.Series([1,2], index=[''a'',''b'']) df = pd.DataFrame([series])

Para series múltiples con índices idénticos:

cols = [''a'',''b''] list_of_series = [pd.Series([1,2],index=cols), pd.Series([3,4],index=cols)] df = pd.DataFrame(list_of_series, columns=cols)

Para series múltiples con índices posiblemente diferentes:

list_of_series = [pd.Series([1,2],index=[''a'',''b'']), pd.Series([3,4],index=[''a'',''c''])] df = pd.concat(list_of_series, axis=1).transpose()

Para crear un DataFrame donde cada serie es una columna , vea las respuestas de otros. Alternativamente, uno puede crear un DataFrame donde cada serie es una fila, como se df.transpose() arriba, y luego usar df.transpose() . Sin embargo, el último enfoque es ineficiente si las columnas tienen diferentes tipos de datos.

Mi código actual se muestra a continuación: estoy importando un archivo MAT e intentando crear un DataFrame a partir de las variables que contiene:

mat = loadmat(file_path) # load mat-file Variables = mat.keys() # identify variable names df = pd.DataFrame # Initialise DataFrame for name in Variables: B = mat[name] s = pd.Series (B[:,1])

Así que dentro del bucle puedo crear una serie de cada variable (son matrices con dos columnas, por lo que los valores que necesito están en la columna 2)

Mi pregunta es ¿cómo agrego la serie al marco de datos? He revisado la documentación y ninguno de los ejemplos parece encajar con lo que estoy tratando de hacer.

Atentamente,

Ben


No es necesario inicializar un DataFrame vacío (ni siquiera estaba haciendo eso, necesitaría pd.DataFrame() con los parens).

En cambio, para crear un marco de datos donde cada serie es una columna,

  1. Haga una lista de series, series y
  2. df = pd.concat(series, axis=1) horizontalmente con df = pd.concat(series, axis=1)

Algo como:

series = [pd.Series(mat[name][:, 1]) for name in Variables] df = pd.concat(series, axis=1)


Supongo que de otra manera, posiblemente más rápido, para lograr esto es 1) Use la comprensión de dict para obtener el dictado deseado (es decir, tomando la segunda columna de cada matriz) 2) Luego use pd.DataFrame para crear una instancia directamente desde el dict sin bucle sobre cada col y concat.

Suponiendo que su mat vea así (puede ignorarlo ya que su mat se carga desde el archivo):

In [135]: mat = {''a'': np.random.randint(5, size=(4,2)), .....: ''b'': np.random.randint(5, size=(4,2))} In [136]: mat Out[136]: {''a'': array([[2, 0], [3, 4], [0, 1], [4, 2]]), ''b'': array([[1, 0], [1, 1], [1, 0], [2, 1]])}

Entonces puedes hacer:

In [137]: df = pd.DataFrame ({name:mat[name][:,1] for name in mat}) In [138]: df Out[138]: a b 0 0 0 1 4 1 2 1 0 3 2 1 [4 rows x 2 columns]