python r dataframe pandas

python - Versión de Pandas de rbind



dataframe (3)

Ah, esto tiene que ver con la forma en que creé el DataFrame, no con cómo los estaba combinando. Lo largo y lo corto es, si está creando un marco utilizando un bucle y una declaración que se ve así:

Frame = Frame.append(pandas.DataFrame(data = SomeNewLineOfData))

Debes ignorar el índice

Frame = Frame.append(pandas.DataFrame(data = SomeNewLineOfData), ignore_index=True)

O tendrá problemas más tarde cuando combine datos.

En R, puede combinar dos marcos de datos al pegar las columnas de uno en la parte inferior de las columnas del otro usando rbind. En pandas, ¿cómo logras lo mismo? Parece extrañamente difícil.

Usar anexar da como resultado un lío horrible que incluye NaNs y cosas por razones que no entiendo. Solo estoy tratando de "enlazar" dos marcos idénticos que se ven así:

EDITAR: Estaba creando los DataFrames de una manera estúpida, lo que causaba problemas. Append = rbind a todos los efectos. Ver la respuesta a continuación.

0 1 2 3 4 5 6 7 0 ADN.L 20130220 437.4 442.37 436.5000 441.9000 2775364 2013-02-20 18:47:42 1 ADM.L 20130220 1279.0 1300.00 1272.0000 1285.0000 967730 2013-02-20 18:47:42 2 AGK.L 20130220 1717.0 1749.00 1709.0000 1739.0000 834534 2013-02-20 18:47:43 3 AMEC.L 20130220 1030.0 1040.00 1024.0000 1035.0000 1972517 2013-02-20 18:47:43 4 AAL.L 20130220 1998.0 2014.50 1942.4999 1951.0000 3666033 2013-02-20 18:47:44 5 ANTO.L 20130220 1093.0 1097.00 1064.7899 1068.0000 2183931 2013-02-20 18:47:44 6 ARM.L 20130220 941.5 965.10 939.4250 951.5001 2994652 2013-02-20 18:47:45

Pero estoy obteniendo algo horrible a la este:

0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 NaN NaN NaN NaN NaN NaN NaN NaN ADN.L 20130220 437.4 442.37 436.5000 441.9000 2775364 2013-02-20 18:47:42 1 NaN NaN NaN NaN NaN NaN NaN NaN ADM.L 20130220 1279.0 1300.00 1272.0000 1285.0000 967730 2013-02-20 18:47:42 2 NaN NaN NaN NaN NaN NaN NaN NaN AGK.L 20130220 1717.0 1749.00 1709.0000 1739.0000 834534 2013-02-20 18:47:43 3 NaN NaN NaN NaN NaN NaN NaN NaN AMEC.L 20130220 1030.0 1040.00 1024.0000 1035.0000 1972517 2013-02-20 18:47:43 4 NaN NaN NaN NaN NaN NaN NaN NaN AAL.L 20130220 1998.0 2014.50 1942.4999 1951.0000 3666033 2013-02-20 18:47:44 5 NaN NaN NaN NaN NaN NaN NaN NaN ANTO.L 20130220 1093.0 1097.00 1064.7899 1068.0000 2183931 2013-02-20 18:47:44 6 NaN NaN NaN NaN NaN NaN NaN NaN ARM.L 20130220 941.5 965.10 939.4250 951.5001 2994652 2013-02-20 18:47:45 0 NaN NaN NaN NaN NaN NaN NaN NaN ADN.L 20130220 437.4 442.37 436.5000 441.9000 2775364 2013-02-20 18:47:42 1 NaN NaN NaN NaN NaN NaN NaN NaN ADM.L 20130220 1279.0 1300.00 1272.0000 1285.0000 967730 2013-02-20 18:47:42 2 NaN NaN NaN NaN NaN NaN NaN NaN AGK.L 20130220 1717.0 1749.00 1709.0000 1739.0000 834534 2013-02-20 18:47:43 3 NaN NaN NaN NaN NaN NaN NaN NaN

Y no entiendo por qué. Estoy empezando a extrañar R :(


Esto funcionó para mí:

import numpy as np import pandas as pd dates = np.asarray(pd.date_range(''1/1/2000'', periods=8)) df1 = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=[''A'', ''B'', ''C'', ''D'']) df2 = df1.copy() df = df1.append(df2)

Rendimientos:

A B C D 2000-01-01 -0.327208 0.552500 0.862529 0.493109 2000-01-02 1.039844 -2.141089 -0.781609 1.307600 2000-01-03 -0.462831 0.066505 -1.698346 1.123174 2000-01-04 -0.321971 -0.544599 -0.486099 -0.283791 2000-01-05 0.693749 0.544329 -1.606851 0.527733 2000-01-06 -2.461177 -0.339378 -0.236275 0.155569 2000-01-07 -0.597156 0.904511 0.369865 0.862504 2000-01-08 -0.958300 -0.583621 -2.068273 0.539434 2000-01-01 -0.327208 0.552500 0.862529 0.493109 2000-01-02 1.039844 -2.141089 -0.781609 1.307600 2000-01-03 -0.462831 0.066505 -1.698346 1.123174 2000-01-04 -0.321971 -0.544599 -0.486099 -0.283791 2000-01-05 0.693749 0.544329 -1.606851 0.527733 2000-01-06 -2.461177 -0.339378 -0.236275 0.155569 2000-01-07 -0.597156 0.904511 0.369865 0.862504 2000-01-08 -0.958300 -0.583621 -2.068273 0.539434

Si aún no usa la última versión de pandas le recomiendo que actualice. Ahora es posible operar con DataFrames que contienen índices duplicados.


import pandas as pd import numpy as np

Si tiene un DataFrame como este:

array = np.random.randint( 0,10, size = (2,4) ) df = pd.DataFrame(array, columns = [''A'',''B'', ''C'', ''D''], / index = [''10aa'', ''20bb''] ) ### some crazy indexes df A B C D 10aa 4 2 4 6 20bb 5 1 0 2

Y desea agregar una NUEVA FILA que sea una lista (u otro objeto iterable):

List = [i**3 for i in range(df.shape[1]) ] List [0, 1, 8, 27]

Debería transformar la lista en diccionario con claves iguales a columnas en DataFrame con la función zip () :

Dict = dict( zip(df.columns, List) ) Dict {''A'': 0, ''B'': 1, ''C'': 8, ''D'': 27}

Que puedes usar el método append () para agregar un nuevo diccionario:

df = df.append(Dict, ignore_index=True) df A B C D 0 7 5 5 4 1 5 8 4 1 2 0 1 8 27

NB los índices están caídos.

Y sí, no es tan simple como cbind () en R :(