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 :(