<jupyter_start><jupyter_text>El propósito de este notebook es crear datos en datarames para concatenarlos. Es muy usual al hacer analisis de datos segmentamos nuestros datosen pequeños paquetes que luego unificaremos.<jupyter_code>import pandas as pd
import numpy as np

# En pandas para ajustar el formato de cifras significativas uso:
pd.options.display.float_format = '{:.2f}'.format
# En numpy para ajustar los dcimales.
np.set_printoptions(precision=2)
# Creo números aleatorios con Numpy positivos en una matriz de 2x5 en una variable x1

x1 = np.random.rand(2,5)*100
x2 = np.random.rand(2,5)*-100
print(x1,x2)<jupyter_output>[[57.68 58.95 54.16 69.41 90.48]
 [56.94 16.74 77.63 13.26 63.28]] [[-87.94 -36.82 -47.58 -37.23 -32.45]
 [ -3.98 -76.87 -61.99 -84.02 -33.91]]<jupyter_text>CONCATENACIÓN CON NUMPY<jupyter_code># Numpy puede concatenar matrices usando concatenate() en el eje de las filas. El arreglo que sale es de 4 filas y 5 columnas.
np.concatenate([x1,x2])
# Al especificar el eje puedo decirle como concatenarse axis = 0 Es por defecto para filas, 1 para columanas
np.concatenate([x1,x2], axis = 1)<jupyter_output><empty_output><jupyter_text>CONCATENACIÓN CON PANDAS<jupyter_code># Definimos una serie de 5 elementos  de la primera fila de X1. y X2 algunos inidices repetidos intencionalemnte.
s1 = pd.Series(x1[0], index=['a','b','c','d','e'])
s2 = pd.Series(x2[0], index=['c','d','e','f','g'])
# Para concatenar usamos concat() Recibe un iterable
pd.concat([s1,s2])
# Si le paso axis puedo manipular como se concatena, en este caso  me junta los indices si lo concateno como columna, Alineando los indices que corresponden
# los nan existen porque no hay valor que represente el indice faltante.
pd.concat([s1,s2], axis =1)
# Si quiereo resetear los indices
s1.reset_index(drop=True)<jupyter_output><empty_output><jupyter_text>CONCATENAR DATAFRAMES<jupyter_code># Creo un data frame de columans a y b con numero aleatroios positivos
df1 = pd.DataFrame(np.random.rand(3,2)*10, columns = ['a','b'])
df1
# Creo un dataframe con numeros negativos, adicional le paso el parámetro de indices para que comparta el indice 2. con el df1
df2 = pd.DataFrame(np.random.rand(3,2)*-10, columns = ['a','b'], index=[2,3,4])
df2
# Para concatenar dataframes
pd.concat([df1,df2])
# Para concatenar a lo largo de las columnas
pd.concat([df1,df2], axis=1)
# Si quiero hacer enfasisi en los elementos que comparten los data frames que estoy intentando concatenar me devuelte la fila
pd.concat([df1,df2], axis=1, join="inner")
# Si quiero hacer que mi dataframe se ajuste sin respetar los indices reseteo el indice
pd.concat([df1.reset_index(drop=True), df2.reset_index(drop=True)], axis =1)
# La función append resume el trabajo. de una maner amás elegante. Lo se pega la segunda matriz debajo de la primera.
df1.append(df2)

# Por extensión puedo unnificar y hacer append de cuantos df quier
df1.append(df2).append(df2).append(df2).append(df2).append(df2)
# para hacer un append a lo largo d elas columans usamos la transpuesta de nuesto dataframe
df1.T.append(df2.T).T<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.109284332688588, 'fraction_numerical': 0.05157962604771115, 'mean_word_length': 5.294117647058823, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 16, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '393468', 'license': 'MIT', 'n_tokens_mistral': 1229, 'n_tokens_neox': 1153, 'n_words': 375, 'path': 'NoteBooks/Curso de Análisis de datos/Analisis y manipulación de datos/Transformando_data/Concatenar Dataframes.ipynb', 'repo_name': 'Alejandro-sin/Learning_Notebooks', 'size': '3102'}