Digamos que tenemos dos marcos de datos de pandas. El primero no tiene nombres de columna:
no_col_names_df = pd.DataFrame(np.array([[1,2,3], [4,5,6], [7,8,9]]))
La segunda tiene:
col_names_df = pd.DataFrame(np.array([[10,2,3], [4,45,6], [7,18,9]]),
columns=['col1', 'col2', 'col3'])
Lo que quiero hacer es obtener una copia de la columna nombres de col_names_df
a no_col_names_df
para que se cree el siguiente marco de datos:
col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
He probado lo siguiente:
new_df_with_col_names = pd.DataFrame(data=no_col_names_df, columns=col_names_df.columns)
Pero en lugar de valores de no_col_names_df
obtengo NaN
s.
4 respuestas
Al igual que ha usado columnas del marco de datos con nombres de columna, puede usar valores del marco de datos sin nombres de columna:
new_df_with_col_names = pd.DataFrame(data=no_col_names_df.values, columns=col_names_df.columns)
In [4]: new_df_with_col_names = pd.DataFrame(data=no_col_names_df, columns=col_names_df.columns) In [5]: new_df_with_col_names Out[5]: col1 col2 col3 0 NaN NaN NaN 1 NaN NaN NaN 2 NaN NaN NaN In [6]: new_df_with_col_names = pd.DataFrame(data=no_col_names_df.values, columns=col_names_df.columns) In [7]: new_df_with_col_names Out[7]: col1 col2 col3 0 1 2 3 1 4 5 6 2 7 8 9
La forma más simple es asignar directamente las columnas de col_names_df
a las de no_col_names_df
:
no_col_names_df.columns = col_names_df.columns
col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
Si está obteniendo nan, lo más probable es que el problema sea el parámetro de datos, intente esto:
new_df_with_col_names = pd.DataFrame(data=no_col_names_df.values, columns=col_names_df.columns)
Salida:
col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
Éste:
pd.DataFrame(data=no_col_names_df, columns=col_names_df.columns)
Le da todos los marcos de datos 'NaN' porque pasa un marco de datos para construir un nuevo marco de datos y asignarle nuevos columns
. Pandas esencialmente construye un marco de datos idéntico y hace reindex
a lo largo de axis 1
en él. En otras palabras, ese comando es equivalente a hacer:
no_col_names_df.reindex(col_names_df.columns, axis=1)
Necesita cambiar directamente no_col_names_df.columns
o pasar no_col_names_df.values
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.