one - Pandas Python: Mantenga la columna seleccionada como DataFrame en lugar de Series
renombrar columna data frame pandas (1)
Al seleccionar una sola columna de un DataFrame pandas (digamos df.iloc[:, 0]
, df[''A'']
, o df.A
, etc.), el vector resultante se convierte automáticamente en una Serie en lugar de una sola columna Marco de datos. Sin embargo, estoy escribiendo algunas funciones que toman un DataFrame como argumento de entrada. Por lo tanto, prefiero tratar con DataFrame de una sola columna en lugar de Series para que la función pueda asumir que df.columns es accesible. Ahora mismo tengo que convertir explícitamente la Serie en un DataFrame usando algo como pd.DataFrame(df.iloc[:, 0])
. Esto no parece ser el método más limpio. ¿Existe una forma más elegante de indexar desde un DataFrame directamente para que el resultado sea un DataFrame de columna única en lugar de Series?
Como @Jeff menciona, hay algunas maneras de hacerlo, pero recomiendo usar loc / iloc para ser más explícito (y plantear errores de manera anticipada si intenta algo ambiguo):
In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=[''A'', ''B''])
In [11]: df
Out[11]:
A B
0 1 2
1 3 4
In [12]: df[[''A'']]
In [13]: df[[0]]
In [14]: df.loc[:, [''A'']]
In [15]: df.iloc[:, [0]]
Out[12-15]: # they all return the same thing:
A
0 1
1 3
Las últimas dos opciones eliminan la ambigüedad en el caso de los nombres de columna enteros (precisamente por qué se crearon loc / iloc). Por ejemplo:
In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=[''A'', 0])
In [17]: df
Out[17]:
A 0
0 1 2
1 3 4
In [18]: df[[0]] # ambiguous
Out[18]:
A
0 1
1 3