Kiko es un gurú en numpy no necesitas a nadie mas XD
El 14 de mayo de 2014, 8:16, AGTUGO <agt...@gmail.com> escribió: > Completamente de acuerdo, en este momento no le podre meter mucho tiempo a > mejorar el performance pero lo haré en un futuro y les comunico mis > resultados. Es extraño que nadie más este en la discusión. ¿Será pandas y > numpy poco usado por esta comunidad? > > > 2014-05-14 1:36 GMT-05:00 Kiko <kikocorre...@gmail.com>: > > >> >> >> El 14 de mayo de 2014, 1:50, AGTUGO <agt...@gmail.com> escribió: >> >> Sí lo unico que me causa un poco de ruido es usar el ciclo for para crear >>> los renglones, siempre trato de evitarlos y usar streaming, indexing, >>> slicing. Pero pues ya cambie mi forma de las combinaciones por tu método. >>> >>> >> Sigo considerando que deberías usar numpy arrays y una vez tengas los >> datos crear el DataFrame final. Modificar un DataFrame puede ser costoso, >> computacionalmente hablando, sobretodo insertar cosas línea a línea (aunque >> usando el método 'loc' remedie en parte eso). >> >> Saludos. >> >> >>> >>> 2014-05-13 14:49 GMT-05:00 Kiko <kikocorre...@gmail.com>: >>> >>> >>>> >>>> >>>> El 13 de mayo de 2014, 20:52, AGTUGO <agt...@gmail.com> escribió: >>>> >>>> Pues aqui tengo el siguiente codigo donde no necesito crear un array >>>>> intermedio. >>>>> >>>>> Creo que la mejor opcion es simplemente usar ix para tener indexing >>>>> tipo numpy, >>>>> ¿Que opinas Kiko? >>>>> >>>>> import numpy as np >>>>> import itertools >>>>> ## tamaño de los renglones y columnas de los datos tabulados >>>>> >>>>> rows = 10 >>>>> columns =5 >>>>> ## informacion proporcionada en forma tabulada aqui estoy simulando el >>>>> csv >>>>> data = np.arange(rows*columns).reshape(rows,columns) >>>>> data_pa = pd.DataFrame(data, columns = ('A','B','C','D','E')) >>>>> display(data_pa) >>>>> >>>>> ## lo siguiente crea los indices de las combinaciones >>>>> >>>>> to_mix = np.arange(rows) >>>>> mixed = list(itertools.product(to_mix,to_mix)) >>>>> combination = [x for x in mixed if (x[0]< x[1])] >>>>> combination = np.array(combination) >>>>> >>>>> >>>>> # separo los indices en dos variables >>>>> index1_comb = combination[:,0] >>>>> index2_comb = combination[:,1] >>>>> >>>>> #creo dos dataframes con los indices y despues los junto >>>>> >>>>> first_c=data_pa.iloc[index1_comb].reset_index(drop=True) >>>>> second_c=data_pa.iloc[index2_comb].reset_index(drop=True) >>>>> final_data_pandas = pd.concat((first_c,second_c),axis=1) >>>>> display(final_data_pandas ) >>>>> >>>>> >>>> En las versiones que te he dejado no uso en ningún momento numpy. ¿No >>>> te valen como opción? >>>> >>>>> >>>>> >>>>> >>>>> >>>>> 2014-05-13 13:09 GMT-05:00 Kiko <kikocorre...@gmail.com>: >>>>> >>>>> >>>>>> >>>>>> >>>>>> El 13 de mayo de 2014, 20:05, AGTUGO <agt...@gmail.com> escribió: >>>>>> >>>>>> >>>>>>> Muchas gracias, no es para clase. Es un programa para calcular la >>>>>>> vida minima de un componente mecánico, entonces debo buscar la vida >>>>>>> minima >>>>>>> buscando todas las posibles combinaciones y despues hacer calculos. Esta >>>>>>> rutina la hago varias veces con algunas variaciones, y con el dataframe >>>>>>> es >>>>>>> mas facil visualizar. >>>>>>> >>>>>>> Cuando paso a un array pierdo un poco de informacion de los headers, >>>>>>> y la tengo que extraer y volver a meter. En mi opinion estar cambiando >>>>>>> de >>>>>>> tipos de datos aumenta la probabilidad de errores y la lectura >>>>>>> posterior. >>>>>>> Es más o menos el ya discutido problema de evitar el tipo matrix en >>>>>>> numpy y >>>>>>> solamente usar arrays aunque sea no tan transparente las operaciones >>>>>>> matriciales. >>>>>>> >>>>>>> >>>>>>> >>>>>> Pues si te ha funcionado, perfecto, y si no es lo que buscabas >>>>>> seguimos iterando. >>>>>> >>>>>> Saludos. >>>>>> >>>>>> >>>>>>> 2014-05-13 12:16 GMT-05:00 Kiko <kikocorre...@gmail.com>: >>>>>>> >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> El 13 de mayo de 2014, 18:31, AGTUGO <agt...@gmail.com> escribió: >>>>>>>> >>>>>>>> Entiendo el punto pero tengo que pasar por un array intermedio. La >>>>>>>>> idea es agarrar un archivo csv direcatamente a un dataframe y de ahi >>>>>>>>> sacar >>>>>>>>> el dataframe con las combinaciones, el método actual sería: >>>>>>>>> >>>>>>>>> 1.- Importar csv en dataframe >>>>>>>>> 2.- Crear un array del dataframe >>>>>>>>> 3.- Crear los indices de las combinaciones >>>>>>>>> 4.- Usar la notacion de indices para crear el array >>>>>>>>> 5.- Crear el dataset a partir del array >>>>>>>>> >>>>>>>>> Método buscado: >>>>>>>>> >>>>>>>>> 1.- Importar csv en dataframe >>>>>>>>> 2.- Crear indices de las combinaciones >>>>>>>>> 3.- Usar "algo" usando los indices para crear el dataframe nuevo a >>>>>>>>> partir del dataframe viejo >>>>>>>>> >>>>>>>>> >>>>>>>>> import pandas as pd >>>>>>>> from itertools import combinations >>>>>>>> >>>>>>>> #Suponemos que este dataframe viene de leerlo con un pd.read_csv() >>>>>>>> #Lo dejo así por simplificar >>>>>>>> df0 = pd.DataFrame([list(range(i,i+5)) for i in range(0,50,5)], >>>>>>>> columns = range(5)) >>>>>>>> >>>>>>>> #creamos el dataframe de destino con 10 columnas >>>>>>>> df1 = pd.DataFrame(columns = range(10)) >>>>>>>> >>>>>>>> # De esta forma estás usando los índices del dataframe df0 para >>>>>>>> hacer las combinaciones >>>>>>>> for i,j in enumerate(combinations(df0.index,2)): >>>>>>>> df1.loc[i] = np.append(df0.ix[j[0]], df0.ix[j[1]]) >>>>>>>> >>>>>>>> El dataframe df1 tendría todas las combinaciones. Me sigue >>>>>>>> pareciendo complicado e innecesario lo que quieres hacer (a no ser que >>>>>>>> sea >>>>>>>> un ejercicio para clase y entonces podría entender lo rebuscado del >>>>>>>> asunto). >>>>>>>> >>>>>>>> Saludos. >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> 2014-05-13 2:12 GMT-05:00 Kiko <kikocorre...@gmail.com>: >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> El 13 de mayo de 2014, 7:23, AGTUGO <agt...@gmail.com> escribió: >>>>>>>>>> >>>>>>>>>> Hola, >>>>>>>>>>> >>>>>>>>>>> He estado tratando de hacer implementacion solamente con panda >>>>>>>>>>> de lo siguiente que ya tengo con numpy, pero no me ha salido nada >>>>>>>>>>> bien. >>>>>>>>>>> Para los mas entradillos con pandas espero que lo siguiente sea >>>>>>>>>>> trivial. >>>>>>>>>>> >>>>>>>>>>> La entrada son datos tabulados de dos dimensiones o una matrix, >>>>>>>>>>> la idea es formar todas las combinaciones, sin repetir y sin >>>>>>>>>>> sustitución, >>>>>>>>>>> de los renglones. La pareja de renglones se ponen en un solo >>>>>>>>>>> renglon. >>>>>>>>>>> >>>>>>>>>>> Mi algoritmo actual es crear los indices de las combinaciones >>>>>>>>>>> posibles, y despues crear la mezcla usando los indices. En codigo >>>>>>>>>>> sería lo >>>>>>>>>>> siguiente. >>>>>>>>>>> >>>>>>>>>>> #### combinaciones.py >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> import numpy as np >>>>>>>>>>> import itertools >>>>>>>>>>> rows = 10 >>>>>>>>>>> columns =5 >>>>>>>>>>> data = np.arange(rows*columns).reshape(rows,columns) >>>>>>>>>>> print('\n===Data===\n') >>>>>>>>>>> print(data) >>>>>>>>>>> to_mix = np.arange(rows) >>>>>>>>>>> mixed = list(itertools.product(to_mix,to_mix)) >>>>>>>>>>> combination = [x for x in mixed if (x[0]< x[1])] >>>>>>>>>>> combination = np.array(combination) >>>>>>>>>>> print('\n===Combination===\n') >>>>>>>>>>> print(combination) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> final_data = >>>>>>>>>>> np.hstack((data[combination[:,0],:],data[combination[:,1],:])) >>>>>>>>>>> print('\n===Final Data===\n') >>>>>>>>>>> print(final_data) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> No entiendo muy bien qué quieres hacer. Si tienes Pandas, tienes >>>>>>>>>> Numpy.¿Por qué no simplemente haces un DataFrame usando el numpy >>>>>>>>>> array >>>>>>>>>> final que has obtenido? >>>>>>>>>> >>>>>>>>>> Sin usar numpy (que deberías tener instalado porque tienes Pandas >>>>>>>>>> instalado, repito): >>>>>>>>>> >>>>>>>>>> from itertools import combinations >>>>>>>>>> >>>>>>>>>> lista = [list(range(i,i+5)) for i in range(0,50,5)] >>>>>>>>>> final = [] >>>>>>>>>> for i in combinations(range(10),2): >>>>>>>>>> final.append(lista[i[0]]+lista[i[1]]) >>>>>>>>>> df = pd.DataFrame(final, columns = range(10)) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Resultado: >>>>>>>>>>> >>>>>>>>>>> ===Data=== >>>>>>>>>>> >>>>>>>>>>> [[ 0 1 2 3 4] >>>>>>>>>>> [ 5 6 7 8 9] >>>>>>>>>>> [10 11 12 13 14] >>>>>>>>>>> ..., >>>>>>>>>>> [35 36 37 38 39] >>>>>>>>>>> [40 41 42 43 44] >>>>>>>>>>> [45 46 47 48 49]] >>>>>>>>>>> >>>>>>>>>>> ===Combination=== >>>>>>>>>>> >>>>>>>>>>> [[0 1] >>>>>>>>>>> [0 2] >>>>>>>>>>> [0 3] >>>>>>>>>>> ..., >>>>>>>>>>> [7 8] >>>>>>>>>>> [7 9] >>>>>>>>>>> [8 9]] >>>>>>>>>>> >>>>>>>>>>> ===Final Data=== >>>>>>>>>>> >>>>>>>>>>> [[ 0 1 2 ..., 7 8 9] >>>>>>>>>>> [ 0 1 2 ..., 12 13 14] >>>>>>>>>>> [ 0 1 2 ..., 17 18 19] >>>>>>>>>>> ..., >>>>>>>>>>> [35 36 37 ..., 42 43 44] >>>>>>>>>>> [35 36 37 ..., 47 48 49] >>>>>>>>>>> [40 41 42 ..., 47 48 49]] >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Al parecer no es tan sencillo crear un nuevo dataframe usando >>>>>>>>>>> los indices en panda. Espero que me puedan dar una orientación >>>>>>>>>>> saludos. >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Arturo Muñoz Tolosa >>>>>>>>>>> >>>>>>>>>>> _______________________________________________ >>>>>>>>>>> Python-es mailing list >>>>>>>>>>> Python-es@python.org >>>>>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> Python-es mailing list >>>>>>>>>> Python-es@python.org >>>>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Arturo Muñoz Tolosa >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Python-es mailing list >>>>>>>>> Python-es@python.org >>>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> Python-es mailing list >>>>>>>> Python-es@python.org >>>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Arturo Muñoz Tolosa >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Python-es mailing list >>>>>>> Python-es@python.org >>>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Python-es mailing list >>>>>> Python-es@python.org >>>>>> https://mail.python.org/mailman/listinfo/python-es >>>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Arturo Muñoz Tolosa >>>>> >>>>> _______________________________________________ >>>>> Python-es mailing list >>>>> Python-es@python.org >>>>> https://mail.python.org/mailman/listinfo/python-es >>>>> FAQ: http://python-es-faq.wikidot.com/ >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> Python-es mailing list >>>> Python-es@python.org >>>> https://mail.python.org/mailman/listinfo/python-es >>>> FAQ: http://python-es-faq.wikidot.com/ >>>> >>>> >>> >>> >>> -- >>> Arturo Muñoz Tolosa >>> >>> _______________________________________________ >>> Python-es mailing list >>> Python-es@python.org >>> https://mail.python.org/mailman/listinfo/python-es >>> FAQ: http://python-es-faq.wikidot.com/ >>> >>> >> >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> FAQ: http://python-es-faq.wikidot.com/ >> >> > > > -- > Arturo Muñoz Tolosa > > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > > -- *monoBOT* Visite mi sitio(Visit my site): monobotblog.alvarezalonso.es
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/