strings - python dataframe concat columns
pandas concat ignore_index no funciona (4)
De acuerdo con los comentarios, siempre es mejor publicar la salida esperada.
¿Es esto lo que estás buscando?
df1 = pd.DataFrame({''A'': [''A0'', ''A1'', ''A2'', ''A3''],
''B'': [''B0'', ''B1'', ''B2'', ''B3''],
''D'': [''D0'', ''D1'', ''D2'', ''D3'']},
index=[0, 2, 3,4])
df2 = pd.DataFrame({''A1'': [''A4'', ''A5'', ''A6'', ''A7''],
''C'': [''C4'', ''C5'', ''C6'', ''C7''],
''D2'': [''D4'', ''D5'', ''D6'', ''D7'']},
index=[ 5, 6, 7,3])
df1 = df1.transpose().reset_index(drop=True).transpose()
df2 = df2.transpose().reset_index(drop=True).transpose()
dfs = [df1,df2]
df = pd.concat( dfs,axis=0,ignore_index=True)
print df
0 1 2
0 A0 B0 D0
1 A1 B1 D1
2 A2 B2 D2
3 A3 B3 D3
4 A4 C4 D4
5 A5 C5 D5
6 A6 C6 D6
7 A7 C7 D7
Estoy intentando unir los marcos de datos de la columna y tengo problemas con concat
pandas, ya que ignore_index=True
no parece funcionar:
df1 = pd.DataFrame({''A'': [''A0'', ''A1'', ''A2'', ''A3''],
''B'': [''B0'', ''B1'', ''B2'', ''B3''],
''D'': [''D0'', ''D1'', ''D2'', ''D3'']},
index=[0, 2, 3,4])
df2 = pd.DataFrame({''A1'': [''A4'', ''A5'', ''A6'', ''A7''],
''C'': [''C4'', ''C5'', ''C6'', ''C7''],
''D2'': [''D4'', ''D5'', ''D6'', ''D7'']},
index=[ 5, 6, 7,3])
df1
# A B D
# 0 A0 B0 D0
# 2 A1 B1 D1
# 3 A2 B2 D2
# 4 A3 B3 D3
df2
# A1 C D2
# 5 A4 C4 D4
# 6 A5 C5 D5
# 7 A6 C6 D6
# 3 A7 C7 D7
dfs = [df1,df2]
df = pd.concat( dfs,axis=1,ignore_index=True)
print df
y el resultado es
0 1 2 3 4 5
0 A0 B0 D0 NaN NaN NaN
2 A1 B1 D1 NaN NaN NaN
3 A2 B2 D2 A7 C7 D7
4 A3 B3 D3 NaN NaN NaN
5 NaN NaN NaN A4 C4 D4
6 NaN NaN NaN A5 C5 D5
7 NaN NaN NaN A6 C6 D6
Incluso si reinicio el índice usando
df1.reset_index()
df2.reset_index()
y luego intenta
pd.concat([df1,df2],axis=1)
¡Todavía produce el mismo resultado!
Gracias por preguntar. Tuve el mismo problema. Por alguna razón, "ignore_index = True" no ayuda en mi caso. Quería mantener el índice del primer conjunto de datos e ignorar el segundo índice que me funcionó.
X_train=pd.concat([train_sp, X_train.reset_index(drop=True, inplace=True)], axis=1)
La opción ignore_index está funcionando en su ejemplo, solo necesita saber que está ignorando el eje de concatenación que en su caso son las columnas. (Quizás un nombre mejor sería ignore_labels). Si desea que la concatenación ignore las etiquetas de índice, entonces su variable de eje debe establecerse en 0 (el valor predeterminado).
Si te entendiera correctamente, esto es lo que te gustaría hacer.
import pandas as pd
df1 = pd.DataFrame({''A'': [''A0'', ''A1'', ''A2'', ''A3''],
''B'': [''B0'', ''B1'', ''B2'', ''B3''],
''D'': [''D0'', ''D1'', ''D2'', ''D3'']},
index=[0, 2, 3,4])
df2 = pd.DataFrame({''A1'': [''A4'', ''A5'', ''A6'', ''A7''],
''C'': [''C4'', ''C5'', ''C6'', ''C7''],
''D2'': [''D4'', ''D5'', ''D6'', ''D7'']},
index=[ 4, 5, 6 ,7])
df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)
df = pd.concat( [df1, df2], axis=1)
Lo que da:
A B D A1 C D2
0 A0 B0 D0 A4 C4 D4
1 A1 B1 D1 A5 C5 D5
2 A2 B2 D2 A6 C6 D6
3 A3 B3 D3 A7 C7 D7
En realidad, habría esperado que df = pd.concat(dfs,axis=1,ignore_index=True)
dé el mismo resultado.
Esta es la excelente explicación de jreback :
ignore_index=True
''ignora'', lo que significa que no se alinea en el eje de unión. simplemente los pega juntos en el orden en que se pasan, luego reasigna un rango para el índice real (por ejemplo,range(len(index))
), por lo que la diferencia entre la unión en índices no superpuestos (supongaaxis=1
en el ejemplo) , es que conignore_index=False
(el valor predeterminado), obtienes la concat de los índices, y conignore_index=True
obtienes un rango.